package at.gv.egovernment.moa.id.commons.db; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import at.gv.egiz.components.configuration.api.ConfigurationException; import at.gv.egiz.eaaf.core.impl.utils.KeyValueUtils; import at.gv.egovernment.moa.id.commons.config.ConfigurationMigrationUtils; import at.gv.egovernment.moa.id.commons.config.MOAIDConfigurationConstants; import at.gv.egovernment.moa.id.commons.config.persistence.MOAIDConfiguration; import at.gv.egovernment.moa.id.commons.db.dao.config.deprecated.OnlineApplication; import at.gv.egovernment.moa.logging.Logger; /** * * */ public class NewConfigurationDBRead { private MOAIDConfiguration conf; @Autowired(required = true) public void setConfiguration(MOAIDConfiguration conf) { // https://jira.spring.io/browse/SPR-3845 this.conf = conf; } @SuppressWarnings("unchecked") public static > T nullGuard(T item) { if (item == null) { return (T) Collections.emptyList(); } else { return item; } } @Transactional public Map getOnlineApplicationKeyValueWithId(String id, boolean backupVersion) { try { if (backupVersion) return conf.getOnlineApplicationBackupVersion(id); else return conf.getOnlineApplication(id); } catch (ConfigurationException e) { Logger.warn("OnlineApplication with Id: " + id + " not found.", e); return null; } } /** * * @return */ @Transactional public List getAllOnlineApplications() { Logger.trace("Get All OnlineApplications from database."); List result = new ArrayList(); try { String[] allUniqueOAIDs = conf.findConfigurationId(MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES + ".*." + MOAIDConfigurationConstants.SERVICE_UNIQUEIDENTIFIER); if (allUniqueOAIDs != null) { for (String uniqueOAID : allUniqueOAIDs) { String oaKeyId = KeyValueUtils.getParentKey(uniqueOAID); Logger.debug("Search service with KeyPrefix:" + oaKeyId); Map oaKeyValuePairs = conf.getPropertySubset(oaKeyId, true); String serviceType = KeyValueUtils.getFirstChildAfterPrefix(oaKeyId, MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES); Logger.debug("Identify Service as: " + serviceType); if (oaKeyValuePairs != null) { Logger.debug("Transform Key/Value to JaxB configuration ..."); oaKeyValuePairs.put(MOAIDConfigurationConstants.PREFIX_MOAID_SERVICES, serviceType); OnlineApplication jaxBOA = ConfigurationMigrationUtils.convertKeyValueToHyberJaxBOnlineApplication(oaKeyValuePairs); String hjID = KeyValueUtils.getFirstChildAfterPrefix(oaKeyId, KeyValueUtils.getParentKey(oaKeyId)); //TODO: work-around for old configTool and new key/value configuration //see BasicOAAction.java line 493 // if (serviceType.equals(MOAIDConfigurationConstants.PREFIX_GATEWAY)) // jaxBOA.setHjid(Long.valueOf(hjID) + 1000000); // else if (serviceType.equals(MOAIDConfigurationConstants.PREFIX_IIDP)) // jaxBOA.setHjid(Long.valueOf(hjID) + 2000000); // else if (serviceType.equals(MOAIDConfigurationConstants.PREFIX_VIDP)) // jaxBOA.setHjid(Long.valueOf(hjID) + 3000000); // else jaxBOA.setHjid(Long.valueOf(hjID)); Logger.debug("Transformation finished with JaxB hjID: " + hjID); result.add(jaxBOA); } else Logger.info("No Service configuration with KeyPrefix: " + oaKeyId); } } if (!result.isEmpty()) return result; } catch (ConfigurationException e) { Logger.error("Access configuration FAILED.", e); } return null; } /** * * @return */ @Transactional public List getAllNewOnlineApplications() { Logger.trace("Get All New OnlineApplications from database."); // select onlineapplication from OnlineApplication onlineapplication // where onlineapplication.isActive = '0' and onlineapplication.isAdminRequired = '1' List result = new ArrayList(); List allOAs = getAllOnlineApplications(); for (OnlineApplication oa : nullGuard(allOAs)) { if (!oa.isIsActive() && oa.isIsAdminRequired()) { result.add(oa); } } if (result.size() == 0) { Logger.trace("No entries found."); return null; } return result; } /** * * @return */ @Transactional public at.gv.egovernment.moa.id.commons.db.dao.config.deprecated.MOAIDConfiguration getMOAIDConfiguration() { Logger.trace("Load MOAID Configuration from database."); Map generalConfig; try { generalConfig = conf.getPropertySubset(MOAIDConfigurationConstants.PREFIX_MOAID_GENERAL, false); if (generalConfig != null) { Logger.debug("Key/Value configuration found -> Start mapping process ..."); at.gv.egovernment.moa.id.commons.db.dao.config.deprecated.MOAIDConfiguration result = ConfigurationMigrationUtils.convertKeyValueToHyberJaxBMOAIDConfiguration(generalConfig); Logger.debug("Configuration mapping process finished."); return result; } } catch (ConfigurationException e) { Logger.error("Configuration access FAILED!", e); } Logger.info("No general MOA-ID configuration found!"); return null; } /** * * @return */ @Transactional public List getAllActiveOnlineApplications() { Logger.trace("Get All New OnlineApplications from database."); // select onlineapplication from OnlineApplication onlineapplication // where onlineapplication.isActive = '1' List result = new ArrayList(); List allOAs = getAllOnlineApplications(); for (OnlineApplication oa : nullGuard(allOAs)) { if (oa.isIsActive()) { result.add(oa); } } if (result.size() == 0) { Logger.trace("No entries found."); return null; } return result; } /** * * @param id * @return */ @Transactional public OnlineApplication getActiveOnlineApplication(String id) { Logger.trace("Getting Active OnlineApplication with ID " + id + " from database."); // select onlineapplication from OnlineApplication onlineapplication // where onlineapplication.publicURLPrefix = // SUBSTRING(:id, 1, LENGTH(onlineapplication.publicURLPrefix)) and onlineapplication.isActive = '1' OnlineApplication result = null; List allActiveOAs = getAllActiveOnlineApplications(); for (OnlineApplication oa : nullGuard(allActiveOAs)) { String publicUrlPrefix = oa.getPublicURLPrefix(); if (publicUrlPrefix != null && publicUrlPrefix.length() <= id.length()) { if ((id.substring(1, publicUrlPrefix.length()).equals(publicUrlPrefix))) { if (result != null) { Logger.warn("OAIdentifier match to more then one DB-entry!"); return null; } else { result = oa; } } } } return result; } /** * * @param dbid * @return */ @Transactional public OnlineApplication getOnlineApplication(long dbid) { Logger.trace("Getting OnlineApplication with DBID " + dbid + " from database."); // select onlineapplication from OnlineApplication onlineapplication where onlineapplication.hjid = :id OnlineApplication result = null; List allOAs = getAllOnlineApplications(); for (OnlineApplication oa : nullGuard(allOAs)) { if (oa.getHjid() == dbid) { result = oa; break; } } return result; } /** * * @param id * @return */ @Transactional public List getOnlineApplications(String id) { Logger.trace("Getting OnlineApplication with ID " + id + " from database."); // select onlineapplication from OnlineApplication onlineapplication // where onlineapplication.publicURLPrefix = SUBSTRING(:id, 1, LENGTH(onlineapplication.publicURLPrefix)) List result = new ArrayList(); List allOAs = getAllOnlineApplications(); for (OnlineApplication oa : nullGuard(allOAs)) { String publicUrlPrefix = oa.getPublicURLPrefix(); if (publicUrlPrefix != null && publicUrlPrefix.length() <= id.length()) { if (id.substring(0, publicUrlPrefix.length()).equals(publicUrlPrefix)) result.add(oa); } } return result; } /** * * @param id * @return */ @Transactional public OnlineApplication getOnlineApplication(String id) { Logger.trace("Getting OnlineApplication with ID " + id + " from database."); // select onlineapplication from OnlineApplication onlineapplication // where onlineapplication.publicURLPrefix = SUBSTRING(:id, 1, LENGTH(onlineapplication.publicURLPrefix)) List result = getOnlineApplications(id); if (result != null && result.size() == 1) return result.get(0); else if (result != null && result.size() > 1) Logger.warn("OAIdentifier match to more then one DB-entry!"); else Logger.warn("no OA with OAIdentifier: "+ id); return null; } /** * * @param id * @return */ @Transactional public List searchOnlineApplications(String id) { Logger.trace("Getting OnlineApplication with ID " + id + " from database."); // select onlineapplication from OnlineApplication onlineapplication // where onlineapplication.friendlyName like :id List result = new ArrayList(); List allOAs = getAllOnlineApplications(); for (OnlineApplication oa : nullGuard(allOAs)) { if (oa.getFriendlyName().contains(id)) { result.add(oa); } } if (result.size() == 0) { Logger.trace("No entries found."); return null; } return result; } }