/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2007-2011 The OpenNMS Group, Inc. * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * OpenNMS(R) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenNMS(R). If not, see: * http://www.gnu.org/licenses/ * * For more information contact: * OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ * http://www.opennms.com/ *******************************************************************************/ package org.opennms.features.reporting.dao.remoterepository; import org.opennms.features.reporting.model.remoterepository.RemoteRepositoryConfig; import org.opennms.features.reporting.model.remoterepository.RemoteRepositoryDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.Resource; import org.springframework.test.context.ContextConfiguration; import org.springframework.util.Assert; import javax.xml.bind.JAXB; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.ArrayList; import java.util.List; /** * <p>DefaultRemoteRepositoryConfigDao class.</p> * <p/> * Class realize the data access to remote-repository.xml. * * @author Markus Neumann <markus@opennms.com> * @author Ronny Trommer <ronny@opennms.com> * @version $Id: $ * @since 1.10.1 */ @ContextConfiguration(locations = {"classpath:META-INF/opennms/applicationContext-reportingDao.xml"}) public class DefaultRemoteRepositoryConfigDao implements RemoteRepositoryConfigDao { /** * Logging */ private Logger logger = LoggerFactory.getLogger("OpenNMS.Report." + DefaultRemoteRepositoryConfigDao.class.getName()); /** * Config resource for remote repository configuration file */ private Resource m_configResource; /** * Remote repository model */ private RemoteRepositoryConfig m_remoteRepositoryConfig; /** * Version number for jasper report */ private String m_jasperReportsVersion; /** * Default constructor load the configuration file */ public DefaultRemoteRepositoryConfigDao(Resource configResource) { m_configResource = configResource; Assert.notNull(m_configResource, "property configResource must be set to a non-null value"); logger.debug("Config resource is set to " + m_configResource.toString()); try { loadConfiguration(); } catch (Exception e) { logger.error("Error could not load remote-repository.xml. Error message: '{}'", e.getMessage()); } logger.debug("Configuration '{}' successfully loaded and unmarshalled.", m_configResource.getFilename()); } /** * {@inheritDoc} */ @Override public void loadConfiguration() throws Exception { InputStream stream = null; long lastModified; File file = null; try { file = m_configResource.getFile(); Assert.notNull(file, "config file must be set to a non-null value"); } catch (IOException e) { logger.error("Resource '{}' does not seem to have an underlying File object.", m_configResource); } if (file != null) { lastModified = file.lastModified(); stream = new FileInputStream(file); } else { lastModified = System.currentTimeMillis(); stream = m_configResource.getInputStream(); } setRemoteRepositoryConfig(JAXB.unmarshal(file, RemoteRepositoryConfig.class)); Assert.notNull(m_remoteRepositoryConfig, "unmarshall config file returned a null value."); logger.debug("Unmarshalling config file '{}'", file.getAbsolutePath()); logger.debug("Remote repository configuration assigned: '{}'", m_remoteRepositoryConfig.toString()); //TODO indigo: The jasper report version should be configured here? setJasperReportsVersion(m_remoteRepositoryConfig.getJasperReportsVersion()); } /** * {@inheritDoc} */ @Override public Resource getConfigResource() { return m_configResource; } /** * {@inheritDoc} */ @Override public void setConfigResource(Resource configResource) { m_configResource = configResource; } /** * {@inheritDoc} */ @Override public String getJasperReportsVersion() { return m_jasperReportsVersion; } /** * {@inheritDoc} */ @Override public Boolean isRepositoryActive(String repositoryID) { return this.getRepositoryById(repositoryID).isRepositoryActive(); } /** * {@inheritDoc} */ @Override public URI getURI(String repositoryID) { return this.getRepositoryById(repositoryID).getURI(); } /** * {@inheritDoc} */ @Override public String getLoginUser(String repositoryID) { return this.getRepositoryById(repositoryID).getLoginUser(); } /** * {@inheritDoc} */ @Override public String getLoginRepoPassword(String repositoryID) { return this.getRepositoryById(repositoryID).getLoginRepoPassword(); } /** * {@inheritDoc} */ @Override public String getRepositoryName(String repositoryID) { return this.getRepositoryById(repositoryID).getRepositoryName(); } /** * {@inheritDoc} */ @Override public String getRepositoryDescription(String repositoryID) { return this.getRepositoryById(repositoryID).getRepositoryDescription(); } /** * {@inheritDoc} */ @Override public String getRepositoryManagementURL(String repositoryID) { return this.getRepositoryById(repositoryID).getRepositoryManagementURL(); } /** * {@inheritDoc} */ @Override public List<RemoteRepositoryDefinition> getAllRepositories() { List<RemoteRepositoryDefinition> resultList = new ArrayList<RemoteRepositoryDefinition>(); resultList.addAll(this.m_remoteRepositoryConfig.getRepositoryList()); return resultList; } /** * {@inheritDoc} */ @Override public List<RemoteRepositoryDefinition> getActiveRepositories() { List<RemoteRepositoryDefinition> resultList = new ArrayList<RemoteRepositoryDefinition>(); for (RemoteRepositoryDefinition repository : this.m_remoteRepositoryConfig.getRepositoryList()) { if (repository.isRepositoryActive()) { resultList.add(repository); } } return resultList; } /** * {@inheritDoc} */ @Override public RemoteRepositoryDefinition getRepositoryById(String repositoryID) { //TODO Tak: How to fail safe this? RemoteRepositoryDefinition result = null; for (RemoteRepositoryDefinition repository : this.getAllRepositories()) { if (repositoryID.equals(repository.getRepositoryId())) { return repository; } } return result; } /** * <p>setRemoteRepositoryConfig</p> * <p/> * Set remote repository configuration * * @param remoteRepositoryConfig a {@link org.opennms.features.reporting.model.remoterepository.RemoteRepositoryConfig} object */ private void setRemoteRepositoryConfig(RemoteRepositoryConfig remoteRepositoryConfig) { m_remoteRepositoryConfig = remoteRepositoryConfig; } /** * <p>getRemoteRepositoryConfig</p> * <p/> * Get remote repository configuration * * @return a {@link org.opennms.features.reporting.model.remoterepository.RemoteRepositoryConfig} object */ private RemoteRepositoryConfig getRemoteRepositoryConfig() { return m_remoteRepositoryConfig; } /** * <p>setJasperReportsVersion</p> * <p/> * Set version for jasper report * * @param jasperReportsVersion a {@link java.lang.String} object */ private void setJasperReportsVersion(String jasperReportsVersion) { m_jasperReportsVersion = jasperReportsVersion; } }