/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * Copyright (c) 2013, MPL CodeInside http://codeinside.ru */ package ru.codeinside.gws.s.oep.dict; import ru.codeinside.gws.api.Internals; import ru.codeinside.gws.api.Packet; import ru.codeinside.gws.api.ReceiptContext; import ru.codeinside.gws.api.RequestContext; import ru.codeinside.gws.api.Revision; import ru.codeinside.gws.api.ServerPipeline; import ru.codeinside.gws.api.ServerRequest; import ru.codeinside.gws.api.ServerResponse; import ru.codeinside.gws.api.XmlTypes; import ru.codeinside.gws.s.oep.dict.app.AppData; import ru.codeinside.gws.s.oep.dict.data.DataRow; import ru.codeinside.gws.s.oep.dict.data.Result; import ru.codeinside.gws.s.oep.dict.data.SystemParams; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import java.net.URL; import java.util.GregorianCalendar; import java.util.List; import java.util.Map; final public class Dictionary implements ServerPipeline { volatile Internals internals; @Override public Revision getRevision() { return Revision.rev120315; } @Override public URL getWsdlUrl() { return getClass().getClassLoader().getResource("wsdl/universaldictionary.wsdl"); } @Override public ServerResponse processRequest(ServerRequest request) { String dictionaryId = null; String exceptRows = null; Map<String, String> dictionary = null; final AppData appData = XmlTypes.elementToBean(request.appData, AppData.class); if (appData != null) { final List<Result> result = appData.getResult(); if (!result.isEmpty()) { Result requestData = result.get(0); dictionaryId = requestData.getRowValue("dictionaryName"); exceptRows = requestData.getRowValue("exceptRows"); } } if (dictionaryId != null) { dictionary = internals.getDictionary(dictionaryId); } if (dictionary != null && exceptRows != null) { for (final String part : exceptRows.split(",")) { final String key = part.trim(); dictionary.remove(key); } } final Result result = new Result(); if (dictionary != null) { final List<DataRow> dataRow = result.getDataRow(); for (final Map.Entry<String, String> entry : dictionary.entrySet()) { final DataRow row = new DataRow(); row.setName(entry.getKey()); row.setValue(entry.getValue()); dataRow.add(row); } } else { final SystemParams systemParams = new SystemParams(); systemParams.setAppId(0); systemParams.setStatusCode(dictionaryId == null ? "Пропущен параметр dictionaryName" : "Справочник не найден"); systemParams.setStatusDate(getCurrentXmlDate()); result.setParams(systemParams); } final ServerResponse response = new ServerResponse(); response.packet = new Packet(); response.packet.status = dictionary != null ? Packet.Status.RESULT : Packet.Status.REJECT; response.packet.exchangeType = "1"; response.packet.typeCode = Packet.Type.SERVICE; response.packet.serviceName = request.packet.serviceName; response.action = request.action; response.appData = XmlTypes.beanToXml(result); return response; } @Override public ServerResponse processRequest(final RequestContext ctx) { throw new UnsupportedOperationException(); } @Override public ServerResponse processStatus(String statusMessage, ReceiptContext receiptContext) { throw new UnsupportedOperationException(); } @Override public ServerResponse processResult(String resultMessage, ReceiptContext receiptContext) { throw new UnsupportedOperationException(); } // ----------------- internals ---------------- protected void bindInternals(Internals internals) { this.internals = internals; } protected void unbindInternals(Internals internals) { this.internals = null; } private XMLGregorianCalendar getCurrentXmlDate() { try { return DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()); } catch (DatatypeConfigurationException e) { throw new IllegalStateException(e); } } }