barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)
Показаны сообщения с ярлыком Eclipse. Показать все сообщения
Показаны сообщения с ярлыком Eclipse. Показать все сообщения

пятница, 23 декабря 2016 г.

Birt: определение числа строк в DataSet'е

Задача

Необходимо определить число строк в некотором DataSet'е, чтобы затем использовать это значение в скрипте.

Решение

Как вариант - создаем JS-переменную, равную 0, и в обработчике onFetch нужно датасэта выполняем ее инкремент.

среда, 6 апреля 2016 г.

Birt: объединение по вертикали ячеек таблицы

Задача

Есть таблица с данными, сгруппированными по определенному полю. Причем в рамках группы значения ячеек нескольких колонок одинаковы. В итоге таблица выглядит примерно следующим образом:
Необходимо ячейки первых двух колонок, входящие в одну группу (и содержащие одинаковые значения) объединить по вертикали.

Решение

Решение вышло несколько нетривиальным. Birt умеет убирать дублирующиеся значения к ячейках колонки (путем установки свойства "Suppress duplicates"), но он при этом не объединяет ячейки, а просто делает все ячейки под первой ячейкой с определенным значением пустыми. Это решение не подходит для случая, когда значения ячеек длинные, т.к. тогда первая строка растягивается по высоте, чего не произошло бы, будь ячейки объединены:
В итоге пришлось задействовать скрипты:
  1. На загловочную строку группы вешаем обработчик onCreate со следующим содержимым:
    reportContext.setGlobalVariable("GROUP_ROW_CNT", 0);
    Т.е. мы устанавливаем глобальную переменную GROUP_ROW_CNT в 0. Эта переменная будет счетчиком строк в рамках группы.
  2. На ячейки первого и второго столбца также вешаем обработчик onCreate:
    var curGroupRowCnt = reportContext.getGlobalVariable("GROUP_ROW_CNT");
    curGroupRowCnt++;
    reportContext.setGlobalVariable("GROUP_ROW_CNT", curGroupRowCnt);
    if(curGroupRowCnt != 1) {
    this.getStyle().display = "none";
    } else {
    this.rowSpan = 1000; // заведомо большое число, т.к. мы на данном этапе не знаем, сколько строк в группе
    }
    Т.е. мы инкрементируем счетчик строк в группе, и далее, если строка первая - устанавливаем для нее значение rowSpan, заведомо большее, чем возможное число строк в группе, а если строка не первая - то скрываем ее.
Вуаля, получаем в точности то, что хотели:

Спасибо http://birtworld.blogspot.ru/2010/10/birt-duplicate-rows.html, подтолкнул в правильном направлении.

вторник, 5 апреля 2016 г.

Birt: отладка отчета и ошибка "Failed to initialize emitter ... Access is denied"

Проблема

Пытаюсь запустить отладку birt-отчета в Birt Report Designer 4.5, получаю ошибку в логе:
апр 05, 2016 9:34:32 PM org.eclipse.birt.report.engine.api.impl.EngineTask handleFatalExceptions
SEVERE: An error happened while running the report. Cause:
org.eclipse.birt.report.engine.api.EngineException: Failed to initialize emitter.
at org.eclipse.birt.report.engine.emitter.EmitterUtil.getOuputStream(EmitterUtil.java:82)
...
Caused by: java.io.FileNotFoundException: \Myreport.rptdesign.html (Access is denied)
at java.io.FileOutputStream.open0(Native Method)
...
Работаю в Windows 7.

Решение

Зайти в конфигурацию отладки (Run -> Debug Configurations) и сменить путь в поле "Temp folder" на существующую доступную для записи директорию. Применить изменения. 

воскресенье, 27 декабря 2015 г.

Birt Report Viewer: логирование

Чтобы получить максимальный уровень логирования для Birt Report Viewer'а, необходимо в его web.xml задать значение параметра BIRT_VIEWER_LOG_LEVEL равным FINEST:
<context-param>
<param-name>BIRT_VIEWER_LOG_LEVEL</param-name>
<param-value>FINEST</param-value>
</context-param>
Логи пишутся в папку log корня развертывания веб-приложения. 

вторник, 5 февраля 2013 г.

Форматтер для NetBeans, использующий Ecplise`овские конфиги

Собственно возникла необходимость в плагине для любимого IDE Netbeans 7.2.1, который форматировал бы исходники и при этом съедал конфигурационные файлы, предназначенные для Eclipse JDT. 
После некоторых поисков нашел вообще универскальное решение: плагин для мавена, позволяющий форматировать исходники хоть из cmd: http://maven-java-formatter-plugin.googlecode.com/svn/site/0.3.1/usage.html. Конфигурируется он в pom:
<plugin>
<groupId>com.googlecode.maven-java-formatter-plugin</groupId>
<artifactId>maven-java-formatter-plugin</artifactId>
<version>0.3.1</version>
<configuration>
<configFile>Q:/my_formatter_config.xml</configFile>
</configuration>
</plugin>
Его вызов можно встроить в GUI Netbeans также, как и вызов любого гола maven, т.е. зайдя в Properties -> Actions -> Add Custom, выбрав имя (например, "Format"), и установив гол "com.googlecode.maven-java-formatter-plugin:maven-java-formatter-plugin:format". После этого форматирование исходников проекта выполняется через контекстное меню проекта:


Плагин позволяет, в том числе, задавать списки включаемых / исключаемых файлов:
<plugin>
<groupId>com.googlecode.maven-java-formatter-plugin</groupId>
<artifactId>maven-java-formatter-plugin</artifactId>
<version>0.3.1</version>
<configuration>
<configFile>Q:/my_formatter_config.xml</configFile>
<includes>
<include>**/Test*.java</include>
</includes>
</configuration>
</plugin>

вторник, 25 сентября 2012 г.

Birt: настройка границ ячеек таблицы

По-умолчанию таблицы отрисовываются вообще без границ ячеек, что вряд ли является удачным решением. В тоже время настроить границы ячеек можно не вполне очевидным образом:
  1. Наводи мышь на таблицу, чтобы появился ярлычок "Table" под её нижним левым углом
  2. Щелкаем по ярлычку:
  3. Щелкаем по верхнему левому углу появившейся рамки вокруг таблицы (вокруг таблицы появится синяя рамка):
  4. В свойствах настраиваем границы:

среда, 22 июня 2011 г.

Подключение к БД из Eclipse Galileo в Debian Linux

В свежеустановленном Eclipse я не нашел одной важной для меня детали: Data Source Explorer, позволяющего подключаться в БД, выполнять к ней запросы и пр. (в Netbeans этот компонент вроде бы установлен по-умолчанию, по крайней мере, в Windows).
Для его добавления необходимо:

1) В сайты-источники приложений добавить http://download.eclipse.org/releases/galileo, если его там ещё нет (Window -> Preferences, там - в Install/Update -> Avaliable Software Sites), а если есть и не разрешен - разрешить (поставить Enabled)

2) Help -> Install New Software, там выбрать вышеуказанный сайт, снять галочку "Group items by category" (когда она стоит, почему-то половина плагинов не видно), и отметить для установки "Data Tools Platform Connectivity", "Data Tools Platform Enablement", а также плагины, необходимые для работы с различными БД, которые Вам необходимы (я, например, установил "Data Tools Platform Enablement for JDBC" и "Data Tools Platform Enablement for MySQL"). Кроме этого, я установил различные "Data Tools Platform SQL Development Tools ... ".

3) Когда всё установится, делаем Window -> Show View -> Data Source Explorer, или, если его там нет, то Window -> Show View -> Other -> Database Management -> Data Source Explorer. Правда, несмотря на то, что "Data Tools Platform Enablement for MySQL" я установил, пришлось дополнительно устанавливать через Synaptic пакет libmysql-java у при создании соединения в Eclipse вручную указывать путь к коннектору (он лежит в /usr/share/java).

пятница, 17 июня 2011 г.

Установка PDT в Debain (Eclipse 3.5.2)

1) Установить eclipse и eclipse-emf через Synaptic
2) Запустить, зайти в Window -> Preferences, там - в Install/Update -> Avaliable Software Sites. Там нужно добавить (или разрешить, т.е. нажать Enable, если данные URL там уже есть, но запрещены):
- Galileo (http://download.eclipse.org/releases/galileo)
- Dynamic Languages Toolkit (http://download.eclipse.org/technology/dltk/updates/)
- PDT (http://download.eclipse.org/tools/pdt/updates/2.0/)
3) Теперь идем в Help -> Install New Software, там выбираем в списке сверху сайт PDT, выбираем для установки "PDT Runtime Feature". Жмем Next, снова Next, принимаем условия соглашения и нажимаем finish. Ждём пока загрузится / установится.

Теперь можно переключить перспективу на PHP через Window -> Open Perspective -> Other.