пятница, 3 января 2014 г.

Jasper Reports и JRDataSource из строки JSON

Иногда поля основного источника данных приходят из разных мест() и в разных форматах данных. Я хотел бы рассмотреть один частный случай, т.е. когда одно из полей(field) основного источника данных является строкой JSON и его нужно как-то обработать или же обработать и использовать его в качестве исходных данных нового источника данных для таблицы или вложенного отчета.
Итак, допустим, что некоторое поле $F{field} является строкой, содержащей JSON (Array), в таком случае, можно сделать интересный финт ушами и создать из этой строки полноценный DataSource. 
new net.sf.jasperreports.engine.data.JRMapCollectionDataSource(
    (java.util.Collection<java.util.Map<String,?>>) new org.json.simple.parser.JSONParser().parse($F{details})
)
Вот такой вот простой трюк позволяет использовать один из типов источников данных Jasper Reports и сразу преобразовать JSON в объектную модель Java. Учтите, это будет работать только в том случае, если в classpath приложения, которое будет рендерить, отчет будет библиотека Simple JSON.
Дело в том, что JRMapCollectionDataSource принимает коллекцию карт (ассоциативных массивов, мап) в качестве исходных для источника данных каждая следующая запись - следующая мапа в коллекции, каждой поле датасэта - это значение, взятое по одноименному ключу из мапы. В случае с JSON и библиотекой Simple JSON мы парсим массив объектов и получаем на выходе объект класса JSONArray, который наследует ArrayList (соответственно, реализует Collection). Далее, JSONArray состоит из объектов JSONObject, которые реализуют java.util.Map. В итоге, мы получаем пример совместимости здравого смысла абсолютно независимых разработчиков в виде совместимого и продуманного интерфейса (что в случае Jasper Reports - феномен).

суббота, 19 октября 2013 г.

Установка Windows 7 и Ubuntu 13.04 на Asus Zenbook U500VZ (UX51VZ)

Вот здесь описано, как установить Windows 7 на данный ноутбук, но к этому материалу нужно кое-что добавить.
Во-первых, после удаления разделов с Windows 8, нужно ОБЯЗАТЕЛЬНО сменить тип таблицы разделов SSD с GPT на старую добрую MBR. Это важно, т.к. Windows 7 "не понимает" GPT. Сделать это достаточно просто и для это существует уйма способов, я лично использовал GParted из комплекта загрузочного диска Ubuntu 13.04. Дальше устанавливаем Windows по инструкции, на которую приведена ссылка выше.
А вот с установкой Ubuntu есть интересный нюанс и заключается он в том, что устанавливать ее с флэшки нельзя, т.к. BIOS позволит загрузиться с флэшки только в режиме UEFI, а нам это не подходит, т.к. установщик не сможет установить загрузчик. Поэтому устанавливать Ubuntu нужно с диска (благо, привод идет в комплекте), а в BIOS нужно выбрать НЕ UEFI режим загрузки с диска. В этом случае установка пройдет нормально.
Отдельно приложу дополнительные загрузки:
полный комплект драйверов;
Windows 7 USB DVD download tool.
А вот здесь есть неплохая инструкция по оптимизации SSD.

воскресенье, 21 октября 2012 г.

Полноценный Android 4.1.1 Jelly Bean для Lenovo Ideapad K1

Я давно уже расстроился и потерял надежду на то, что дождусь нормального обновления от lenovo. Они конечно выкатили какую-то там сборку без маркета, но это не считается. Тем не менее, некий дядя под ником khanning сделал хорошую стабильную сборку 4.1.1 с маркетом. Инструкцию можно найти здесь. Первые впечатления превосходные, все работает стабильно и очень быстро, если сравнивать с 3-м ведроидом от Lenovo. 

суббота, 13 октября 2012 г.

Решение проблемы со звуком в Ubuntu 12.04 на чипсетах Intel Z77

После замены железа, я был жутко расстроен тем, что в убунте нифига не заработал звук, хотя это не сильно логично. На кого, как не на Intel, они должны ориентироваться? После долгих ковыряний, было найдено банальное решение проблемы. Нужно просто установить последние драйверы ALSA. Качаем последние стабильные драйвера отсюда (если основные сервера недоступны, поищите последнюю версию на зеркалах). Распаковываем скачанный архив, переходим в его директорию и последовательно выполняем следующее:
./configure
make
sudo make install
sudo reboot
Все стабильно отработало на чистой 12.04.1

понедельник, 3 сентября 2012 г.

Проблема с SyntaxHighlighter в Chrome

В последней (3.0.83) версии SyntaxHighlighter есть неприятная особенность, которая проявляется в Chrome. Номера строк не вмещаются в боковой панельке и идут по одной цифре, что ломает собой весь вид. Я для себя сделал следующий фикс:
.syntaxhighlighter table td.gutter .line {
  text-align: right !important;
  padding: 0 5px  !important;
}


воскресенье, 2 сентября 2012 г.

JAAS в Glassfish 3

Не так давно задался целью написать простой JAAS-модуль для сервера GlassFish 3, поскольку EJB Security доступна только в случае использования одного из стандартных модулей, либо своего собственного. Самым доступным и полным руководством для меня оказалась статья "Применение JAAS в Web-приложениях на glassfish v2" пользователя cy6erGn0m, но не обошлось и без неприятностей, т.к. оказалось, что в третьей версии сервера кое-что поменяли и эти ваши интернеты почти ничего об этом не говорят. В общем, я решил написать еще одно краткое руководство, в дополнение к существующему.