All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nbnResolving.resolver.EpicurLocalResolver Maven / Gradle / Ivy

/* *********************************************************************
 * Class EpicurLocalResolver
 * 
 * Copyright (c) 2010-2013, German National Library/Deutsche Nationalbibliothek
 * Adickesallee 1, D-60322 Frankfurt am Main, Federal Republic of Germany 
 *
 * This program is free software.
 * For your convenience it is dual licensed.
 * You can redistribute it and/or modify it under the terms of
 * one of the following licenses:
 * 
 * 1.)
 * 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.
 * You should have received a copy of the GNU General Public License
 * along with this program (gpl-3.0.txt); if not please read
 * http://www.gnu.org/licenses/gpl.html
 * 
 * 2.)
 * The European Union Public Licence as published by
 * The European Commission (executive body of the European Union);
 * either version 1.1 of the License, or (at your option) any later version.
 * You should have received a copy of the European Union Public Licence
 * along with this program (eupl_v1.1_en.pdf); if not please read
 * http://www.osor.eu/eupl
 * 
 * This program 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 above licenses for more details.
 * 
 * Kadir Karaca Kocer -- German National Library
 * 
 **********************************************************************/

/* ********************************************************************
 * CHANGELOG:
 * 
 * 2013-08-05 Some fixes for valid XML serialisation (NULL checks)
 * 2012-04-03 Port to Maven by Timo Heck & Karaca Kocer
 * Created on 2010-07-27 by Karaca Kocer
 ********************************************************************/

package org.nbnResolving.resolver;

import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

//import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.nbnResolving.common.URNUtils;
import org.nbnResolving.database.impl.DatabaseUtils;
import org.nbnResolving.database.model.TableINSTITUTION;
import org.nbnResolving.database.model.TableNAMESPACE;
import org.nbnResolving.database.model.TableURL;
import org.nbnResolving.database.model.TableURN;

import org.nbnResolving.pidef.*;

import eu.europeanaconnect.erds.DataProvider;
import eu.europeanaconnect.erds.ResolverException;
import eu.europeanaconnect.erds.ResolverRequest;

/**
 * Class implementing a resolver for URNs that are locally
 * saved in National Libraries which are using EPICUR database model.
 * Please see http://www.dnb.de/eng/wir/projekte/epicur.htm
 * for more information.
 * 
 * (This class gets its data from a legacy Sybase ASE database.
 * So you have to know the structure of this database to understand
 * how things work and why.)
 * 
 * @see eu.europeanaconnect.erds.DataProvider
 * @see org.nbnResolving.database.impl.DatabaseUtils
 * @see org.nbnResolving.database.model.TableURN
 * @see org.nbnResolving.database.model.TableURL
 * 
 * @author Kadir Karaca Kocer
 */

public class EpicurLocalResolver implements DataProvider {
    private static final Log LOGGER = LogFactory.getLog(EpicurLocalResolver.class);

    protected String requestUrlPattern;
    protected String id;
    protected String label;
    protected List supportedNamespaces;
    protected String identifierPattern;
    protected boolean showAdress = true;
    
    //protected String driver;
    //protected String database;
    //protected String user;
    //protected String password;
    protected javax.sql.DataSource dataSource;
 
    private static final boolean EXTENDED = true; //Ask RDBMS more information. TRUE for debugging
	protected final static String FRAG_CHAR="/fragment/"; //experimental! resolving for URNs with fragments
    
    /**
     * Default Constructor
     */
    public EpicurLocalResolver() {
    	LOGGER.debug("EpicurLocalResolver: Hallo World. Here I am!");
    }
    
	/**
	 * {@inheritDoc}
	 */
	@Override
	public EpicurResolverResponse getResponse(ResolverRequest req) throws ResolverException {
		LOGGER.debug("EpicurLocalResolver.getResponse() - Start"); 
		//first check if the parameters are ok
		if (req == null) throw new ResolverException("ERROR: EpicurLocalResolver.getResponse() " + 
				"ResolverRequest can not be NULL!", ResolverException.ResolverExceptionCode.INVALID_IDENTIFIER);

		String action = req.getAction();
		//full information is default
		if ((action != null) && (!action.isEmpty())) action = action.trim().toLowerCase();
			else action = "full";
		  
	    java.sql.Connection connection = null;
		EpicurResolverResponse response = null;
		
        //connecting to the database using the data source (server:port, user name and password -> see the XML config file)
		try {
			//connection = DatabaseUtils.connectToDatabase(this.database, this.driver, this.user, this.password, true); //true -> readOnly
			connection = this.dataSource.getConnection();
			if (connection == null) {
				throw new ResolverException("ERROR: EpicurLocalResolver.getResponse() " + 
						"Connection can not be NULL!", ResolverException.ResolverExceptionCode.IO_ERROR);
			}
			connection.setReadOnly(true);
		} catch (Exception e) {
			LOGGER.error("Exception! EpicurLocalResolver: Can not connect to Database.");
			e.printStackTrace();
			throw new ResolverException("EXCEPTION! Can not connect to Database!\n" + e.getMessage(),
				                         ResolverException.ResolverExceptionCode.IO_ERROR, e);
		}
		
		//DBMS ok. Analyse what the user wants
		LOGGER.debug("Database ok. Processing the request.");   
		try {
			if (action.equals("full") || action.equals("geturl")) {
				response = getURNResolvingResponse(req.getIdentifier(), Constants.RESOLVE_FULL_INFO, this.showAdress, connection);
			} else if (action.equals("frontpage")) {
				response = getURNResolvingResponse(req.getIdentifier(), Constants.RESOLVE_ONLY_FRONTPAGE, this.showAdress, connection);
			} else if (action.equals("first")) {
				response = getURNResolvingResponse(req.getIdentifier(), Constants.RESOLVE_FIRST_URL, this.showAdress, connection);
			} else if (action.equals("archive")) {
				response =  getURNResolvingResponse(req.getIdentifier(), Constants.RESOLVE_ONLY_ARCHIVE, this.showAdress, connection);
			} else if (action.equals("reverse")) {
				//Read the URL to reverse look up from the parameters
				String url = req.getParameters().get("url");
				response = getURNForURL(url, connection);		
			} else if (action.equals("namespaces")) {
				response = getNamespaceList(connection);
			} else if (action.equals("institutions")) {
				response = getInstitutionList(this.showAdress, connection);
			} else throw new ResolverException("ERROR: EpicurLocalResolver.getResponse() -- The action: " +
					action + " is not defined! Please check.", ResolverException.ResolverExceptionCode.INVALID_IDENTIFIER);
		} catch (Exception e) {
			e.printStackTrace();
			throw new ResolverException("ERROR: EpicurLocalResolver.getResponse() " + 
					"Exception during getting response", ResolverException.ResolverExceptionCode.IO_ERROR, e);
		} finally {
        	//shut down the database connection
        	LOGGER.debug("EpicurLocalResolver: Checking if the Connection is open.");
            try {
            	if (!connection.isClosed()) connection.close();
                LOGGER.debug("EpicurLocalResolver: Connection closed successfully.");
            }
            catch (SQLException e) {
                LOGGER.error("Error! Could not close the database. See the Stack Trace:\n" + e.getMessage());
                e.printStackTrace();
            }
            connection = null;
        }
		
		LOGGER.debug("EpicurLocalResolver.getResponse() -- End");
		return response;
}

	/*
	 * @param urn  URN to validate.
	 * @param cc   TRUE if you want the Checksum also to be validated. 
	 * @param cns  TRUE if you want the Namespace also to be validated.
	 * @return Returns:
0 for URN:NBN comforms all the rules.
1 if the is a syntax error * public static int validateURN(String urn, boolean cc, boolean cns) { int statuscode = 0; // implement logic. Till then all URNs are OK. return statuscode; }*/ /** * * @return Found URLs for this URN. * @throws ResolverException * @throws SQLException * @throws UnsupportedEncodingException * @throws MalformedURLException * @throws URISyntaxException */ private static EpicurResolverResponse getURNResolvingResponse(String pi, short action, boolean showAdress, java.sql.Connection connection) throws SQLException, ResolverException, MalformedURLException, UnsupportedEncodingException, URISyntaxException{ //TODO: catch SQLException --> throw ResolverException LOGGER.debug("EpicurLocalResolver.getURNResolvingResponse() -- Start\nURN = " + pi); if (pi == null) throw new ResolverException("ERROR: EpicurLocalResolver.getURNResolvingResponse()" + "Identifier can not be null!", ResolverException.ResolverExceptionCode.INVALID_IDENTIFIER); //TODO: URL decode? activate lowercase again? String urn = pi.trim(); //.toLowerCase(); //URN granular: alpha version String[] parts = urn.split(FRAG_CHAR); String fragment = null; if (parts.length > 1) { urn = parts[0]; fragment = parts[1]; //if ((fragment != null) && (!fragment.isEmpty())) fragment = fragment.replaceAll("/", "&"); } LOGGER.debug("getURNResolvingResponse(): Fragment= " + fragment); if (urn.length() < 16) throw new ResolverException("ERROR: EpicurLocalResolver.getURNResolvingResponse()" + " Wrong identifier format. Expected: urn:nbn:(at|ch|de):[Namespace]-[UniqueIdentifier][Checksum]", ResolverException.ResolverExceptionCode.INVALID_IDENTIFIER); TableURN urnInfo = DatabaseUtils.getURNInfo(connection, urn, true); EpicurResolverResponse response = new EpicurResolverResponse(); HeaderType header = response.getDoc().getPidef().getHeader(); MessageType message = header.insertNewMessage(0); message.setLang("en"); if (urnInfo != null) { if (LOGGER.isDebugEnabled()) LOGGER.debug(urnInfo.toString()); if (urnInfo.getNewer_version() > 0) { //there is a newer version. no need to process further LOGGER.debug("EpicurLocalResolver: There exists a newer version of this URN. Skipping URLs."); header.setStatusCode(Constants.URN_HAS_NEWER_VERSION); message.setStringValue(DatabaseUtils.getURNasString(connection, urnInfo.getNewer_version())); } else { int active = urnInfo.getActive(); switch (active) { case Constants.URN_STATUS_ACTIVE: //there exists an active URN: ask for the Institution and URLs LOGGER.debug("EpicurLocalResolver: Active URN found. Getting its URLs."); DataType data = response.getDoc().getPidef().getData(); ResolvingInfoType resInfo = data.addNewResolvingInformation(); PiInfoType uit = resInfo.addNewPiInfo(); long urnId = urnInfo.getUrn_id(); uit.setNum(urnId); uit.setIdentifier(urn); if ((fragment != null) && (!fragment.isEmpty())) {uit.setFragment(fragment);} //else {uit.setFragment(null);} uit.setStatus(Constants.URN_STATUS_ACTIVE); int instId = DatabaseUtils.getInstitutionIdForNamespace(connection, urnInfo.getNs_id()); TableINSTITUTION ti = DatabaseUtils.getInstitution(connection, instId, EXTENDED); convertInstitutionTable(ti, uit.addNewOwner(), showAdress); if (urnInfo.getCreated() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(urnInfo.getCreated()); uit.setCreated(cal); } if (urnInfo.getLast_modified()!= null) { Calendar cal = Calendar.getInstance(); cal.setTime(urnInfo.getLast_modified()); uit.setLastModified(cal); } //Everything ok so far. get the URLs for this URN ArrayList urls = null; UrlInfoType urlInfo = null; switch (action) { case Constants.RESOLVE_FIRST_URL: //get only the first URL LOGGER.debug("Getting the first URL for: " + urn); /* urls = new ArrayList(); TableURL firsturl = new TableURL(); firsturl.setUrl(DatabaseUtils.getURLsAsString(this.connection, urnId).get(0)); urls.add(firsturl); */ urlInfo = resInfo.addNewUrlInfo(); String firsturl = DatabaseUtils.getURLsAsString(connection, urnId).get(0); if (firsturl != null && !firsturl.isEmpty()) { header.setStatusCode(Constants.URN_RESOLVING_OK); message.setStringValue("URN with the highest priority follows."); //add the fragment if one exists if ((fragment != null) && (!fragment.isEmpty())) { //add the fragment as URL query parameter firsturl = URNUtils.addParamsToUrl(firsturl, URNUtils.getParameterMap(fragment, "/")); //firsturl = URNUtils.addQueryToUrl(firsturl, fragment); //firsturl + FRAG_CHAR + fragment; } urlInfo.setUrl(firsturl); } else { header.setStatusCode(Constants.NO_REGISTERED_URL); message.setStringValue("URN: " + urn + " has no active URLs registered."); } break; case Constants.RESOLVE_ONLY_FRONTPAGE: //get only the fronpage(s) LOGGER.debug("Getting URLs that are marked as Frontpage for URN: " + urn); urls = DatabaseUtils.getFrontpage(connection, urnId, EXTENDED, true); break; case Constants.RESOLVE_ONLY_ARCHIVE: //get only the fronpage(s) LOGGER.debug("Getting URLs that are marked as Frontpage for URN: " + urn); urls = DatabaseUtils.getArchive(connection, urnId, EXTENDED, true); break; default: //Full information is default LOGGER.debug("Getting full information for URN: " + urn); urls = DatabaseUtils.getActiveURLs(connection, urnId, EXTENDED, true); } if (action != Constants.RESOLVE_FIRST_URL) { if (urls != null && !urls.isEmpty()) { for (TableURL url : urls) { urlInfo = resInfo.addNewUrlInfo(); urlInfo = convertURLtoUrlInfo(url, urlInfo, fragment, showAdress, connection); } header.setStatusCode(Constants.URN_RESOLVING_OK); message.setStringValue(urn + " is successfully resolved."); } else { header.setStatusCode(Constants.NO_REGISTERED_URL); message.setStringValue("URN: " + urn + " has no active URLs registered."); } } break; case Constants.URN_STATUS_INACTIVE: //URN is marked as inactive LOGGER.debug("EpicurLocalResolver: This URN is marked inactive. Skipping URLs."); header.setStatusCode(Constants.REQUESTED_URN_IS_INACTIVE); message.setStringValue(urn + " is marked as INACTIVE. Please contact the responsible institution."); break; case Constants.URN_STATUS_RESERVED: //URN is marked as reserved LOGGER.debug("EpicurLocalResolver: This URN is marked reserved. Skipping URLs."); header.setStatusCode(Constants.REQUESTED_URN_IS_RESERVED); message.setStringValue(urn + " has been RESERVED but not set active yet. Please contact the responsible institution."); break; default: //any other value is not allowed -> ERROR LOGGER.error("The value " + active + " is not defined for URN.ACTIVE!"); header.setStatusCode(Constants.NO_SUCH_URN_STATUS); message.setStringValue(urn + " has an undefined activation code. Please contact the responsible institution."); } } //response.setUrnInfo(urnInfo); } else { //urnInfo is NULL! no such URN! Error handling! //TODO: hier testen, ob NAMENSRAUM existiert. evt. andere Fehlercode LOGGER.debug("EpicurLocalResolver: This URN is not registered at the German National Library"); header.setStatusCode(Constants.NO_SUCH_URN_IN_DATABASE); message.setStringValue(urn + " is not registered at the German National Library"); } LOGGER.debug("EpicurLocalResolver.getFullResolvingResponse() -- End."); return response; } /** * @return Found URLs for this URN. * @throws SQLException * @throws ResolverException */ private static EpicurResolverResponse getURNForURL(String identifier, java.sql.Connection connection) throws SQLException { LOGGER.debug("EpicurLocalResolver.getURNForURL() -- Start\nURL = " + identifier); //TODO: prüfen & URL encoding! String url = identifier.trim(); //.toLowerCase(); blöde Idee! NICHT tun. EpicurResolverResponse response = new EpicurResolverResponse(); HeaderType header = response.getDoc().getPidef().getHeader(); MessageType message = header.insertNewMessage(0); message.setLang("en"); long urnId = DatabaseUtils.getURNidForURL(connection, url); if (urnId > 0) { String urn = DatabaseUtils.getURNasString(connection, urnId); if ((urn != null) && (urn.length() > 15)) { DataType data = response.getDoc().getPidef().getData(); ResolvingInfoType resInfo = data.addNewResolvingInformation(); PiInfoType urnInfo = resInfo.addNewPiInfo(); urnInfo.setIdentifier(urn); resInfo.addNewUrlInfo().setUrl(url); header.setStatusCode(Constants.URN_FOR_URL_FOLLOWS); message.setStringValue("The given URL is registered for following URN"); } else { header.setStatusCode(Constants.PROBLEM_WITH_URN_ID); message.setStringValue("The registered URN for given URL is not valid. Please inform the owner."); LOGGER.error("URL: " + url + " URN_ID: " + urnId + " returned NULL or invalid URN. Please check."); } } else { header.setStatusCode(Constants.NO_URN_WITH_THIS_URL); message.setStringValue("This URL is not registered in the German National Library URN:NBN database"); } //TODO: set other header data LOGGER.debug("EpicurLocalResolver.getURNForURL() -- End."); return response; } /** * Returns all registered Namespaces. * * @return All registered namespaces. * @throws SQLException */ private static EpicurResolverResponse getNamespaceList(java.sql.Connection connection) throws SQLException { LOGGER.debug("EpicurLocalResolver.getNamespaceList() -- Start"); EpicurResolverResponse response = new EpicurResolverResponse(); HeaderType header = response.getDoc().getPidef().getHeader(); MessageType message = header.insertNewMessage(0); message.setLang("en"); ArrayList namespaceList = DatabaseUtils.getNamespaceList(connection); if ((namespaceList != null) && (namespaceList.size() > 0)) { LOGGER.debug(namespaceList.size() + " namespaces found in database. Generating the list."); DataType data = response.getDoc().getPidef().getData(); NamespaceArray namespaces = data.addNewNamespaces(); //loop all found namespaces for (TableNAMESPACE nst : namespaceList) { NamespaceType namespace = namespaces.addNewNamespace(); namespace.setNum((nst.getNs_id())); namespace.setName(nst.getName()); namespace.setCountry(nst.getCountry()); namespace.setStatus(nst.getNs_status()); //RESOLVER_ADRESS //IS_PART_OF does not exist! namespace.setActive(nst.isActive()); //LAST_SEPERATOR if (nst.isDig_signed()) { namespace.setDigSigned(true); String pk = nst.getPublic_key(); if ((pk != null) && (pk.length() > 50)) { namespace.setPublicKey(pk); } else { LOGGER.error("ERROR: Signed NAMESPACE has no valid Public Key!"); namespace.setPublicKey("ERROR: Invalid Public Key: " + pk + " ! Please inform the namespace owner."); } } else { namespace.setDigSigned(false); } //APPEARS_IN_STATISTIC //URN_GENERATION_COUNTER //URN_GENERATION_DATE if (nst.getCreated() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(nst.getCreated()); namespace.setCreated(cal); } if (nst.getLast_modified()!= null) { Calendar cal = Calendar.getInstance(); cal.setTime(nst.getLast_modified()); namespace.setLastModified(cal); } //TODO: set last checked! //COMMENT } header.setStatusCode(Constants.NAMESPACE_LISTING_SUCCESSFUL); message.setStringValue(namespaceList.size() + " namespaces listed"); } else { //no namespace? this is a serious ERROR! LOGGER.error("ERROR: No namespace found. Please check!"); header.setStatusCode(Constants.NO_NAMESPACE_FOUND); message.setStringValue("No namespace found. Please check the database"); } LOGGER.debug("EpicurLocalResolver.getNamespaceList() -- End."); return response; } /** * Returns all registered Institutions. * * @return All registered institutions. * @throws SQLException */ private static EpicurResolverResponse getInstitutionList(boolean showAdress, java.sql.Connection connection) throws SQLException{ LOGGER.debug("EpicurLocalResolver.getInstitutionList() -- Start"); EpicurResolverResponse response = new EpicurResolverResponse(); HeaderType header = response.getDoc().getPidef().getHeader(); MessageType message = header.insertNewMessage(0); message.setLang("en"); ArrayList institutionList = DatabaseUtils.getInstitutionList(connection); if ((institutionList != null) && (institutionList.size() > 0)) { LOGGER.debug(institutionList.size() + " institutions found in database. Generating the list."); DataType data = response.getDoc().getPidef().getData(); InstitutionArray institutions = data.addNewInstitutions(); //loop all found namespaces for (TableINSTITUTION inst : institutionList) { InstitutionType it = institutions.addNewInstitution(); it = convertInstitutionTable(inst, it, showAdress); } header.setStatusCode(Constants.INSTITUTION_LISTING_SUCCESSFUL); message.setStringValue(institutionList.size() + " institutions listed"); } else { //no institution? this is a serious ERROR! LOGGER.error("ERROR: No institution found. Please check!"); header.setStatusCode(Constants.NO_INSTITUTION_FOUND); message.setStringValue("No institution found. Please check the database"); } LOGGER.debug("EpicurLocalResolver.getInstitutionList() -- End."); return response; } private static UrlInfoType convertURLtoUrlInfo(TableURL url, UrlInfoType uit, String fragment, boolean showAdress, java.sql.Connection connection) throws SQLException, MalformedURLException, UnsupportedEncodingException, URISyntaxException { //check if the URN has fragments if ((fragment != null) && (!fragment.isEmpty())) { String urlWithFragment = URNUtils.addParamsToUrl(url.getUrl(), URNUtils.getParameterMap(fragment, "/")); //URNUtils.addQueryToUrl(, fragment); if (LOGGER.isDebugEnabled()) LOGGER.debug("convertURLtoUrlInfo(): URL= " + urlWithFragment); uit.setUrl(urlWithFragment); } else uit.setUrl(url.getUrl()); //InstitutionType owner = uit.addNewOwner(); int instId = url.getInstitution_id(); TableINSTITUTION ti = DatabaseUtils.getInstitution(connection, instId, EXTENDED); //InstitutionType owner = convertInstitutionTable(ti, uit.addNewOwner(), showAdress); if (url.getMimeType() != null) uit.setMimetype(url.getMimeType()); uit.setFrontpage(url.isN2c()); uit.setOrigin(url.getOrigin()); uit.setStatus(url.getStatus()); if (url.getFilesize() > 0) uit.setFilesize(url.getFilesize()); ChecksumInfoType cit = uit.addNewChecksumInfo(); if (url.isChecksum_check() && (url.getChecksum() != null) && (!url.getChecksum().isEmpty())) { cit.setChecksumCheck(true); cit.setChecksumAlgorithm("MD5"); //TODO: find a solution cit.setChecksum(url.getChecksum()); cit.setChecksumError(url.isChecksum_error()); if (url.getLast_checksum_check() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(url.getLast_checksum_check()); cit.setLastChecksumCheck(cal); } } else { cit.setChecksumCheck(false); } LinkCheckType lct = uit.addNewLinkCheckInfo(); lct.setUrlCheck(false); /* deactivated until Link-Checker is implemented and function properly if (url.isUrl_check()) { lct.setUrlCheck(true); lct.setHttpStatus((short) HttpServletResponse.SC_OK); lct.setErrorCount((short) 0); if (url.getLast_url_check() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(url.getLast_url_check()); lct.setLastUrlCheck(cal); } } else { lct.setUrlCheck(false); } */ if (url.getBlocking_time() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(url.getLast_modified()); uit.setDeactivationTime(cal); } if (url.getCreated() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(url.getCreated()); uit.setCreated(cal); } if (url.getLast_modified() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(url.getLast_modified()); uit.setLastModified(cal); } return uit; } private static InstitutionType convertInstitutionTable(TableINSTITUTION inst, InstitutionType it, boolean showAdress) { //TODO: eliminate IllegalArgumentException if ((inst == null) || (it == null)) throw new IllegalArgumentException("ERROR: institution table or type can not be NULL!"); if (inst.getSign() != null) it.setRef(Constants.GND_URI_ROOT + "/" + inst.getSign()); if (inst.getInstitution_id() > 0) it.setNum(inst.getInstitution_id()); //name is mandatory it.setName(inst.getName()); if (showAdress) { if (inst.getStreet() != null) it.setStreet(inst.getStreet()); if (inst.getOffice_box() != null) it.setOfficeBox(inst.getOffice_box()); if (inst.getZip() != null) it.setZip(inst.getZip()); if (inst.getCity() != null) it.setCity(inst.getCity()); //Homepage & E-Mail ?? } if (inst.getCountry() != null) it.setCountry(inst.getCountry()); it.setCheckChecksum(inst.isCheck_checksum()); if (inst.getChecksum_algorithm() != null) it.setChecksumAlgorithm(inst.getChecksum_algorithm()); if (inst.getCreated() != null) { Calendar cal = Calendar.getInstance(); cal.setTime(inst.getCreated()); it.setCreated(cal); } if (inst.getLast_modified()!= null) { Calendar cal = Calendar.getInstance(); cal.setTime(inst.getLast_modified()); it.setLastModified(cal); } //TODO: set last checked! return it; } /** * {@inheritDoc} */ @Override public String getId() { return this.id; } /** * {@inheritDoc} */ @Override public String getIdentifierPattern() { return this.identifierPattern; } /** * {@inheritDoc} */ @Override public List getSupportedNamespaces() { return this.supportedNamespaces; } /** * @return the requestUrlPattern */ public String getRequestUrlPattern() { return this.requestUrlPattern; } /** * @param pattern the requestUrlPattern to set */ public void setRequestUrlPattern(String pattern) { this.requestUrlPattern = pattern; } /** * @return the label */ public String getLabel() { return this.label; } /** * @param newLabel the label to set */ public void setLabel(String newLabel) { this.label = newLabel; } /** * @param newId the id to set */ public void setId(String newId) { this.id = newId; } /** * @param namespaces Supported Namespaces to set */ public void setSupportedNamespaces(List namespaces) { this.supportedNamespaces = namespaces; } /** * @param pattern the identifierPattern to set */ public void setIdentifierPattern(String pattern) { this.identifierPattern = pattern; } /** * @return the datasource */ public javax.sql.DataSource getDataSource() { return this.dataSource; } /** * @param datasource the datasource to set */ public void setDataSource(javax.sql.DataSource datasource) { this.dataSource = datasource; } /** * @return the showAdress */ public boolean isShowAdress() { return this.showAdress; } /** * @param showAdress the showAdress to set */ public void setShowAdress(boolean showAdress) { this.showAdress = showAdress; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy