package org.ariadne_eu.service; import org.apache.log4j.Logger; import org.ariadne.config.PropertiesManager; import org.ariadne_eu.content.insert.InsertContentFactory; import org.ariadne_eu.metadata.delete.DeleteMetadataFactory; import org.ariadne_eu.metadata.insert.InsertMetadataException; import org.ariadne_eu.metadata.insert.InsertMetadataFactory; import org.ariadne_eu.spi.SpiFault; import org.ariadne_eu.spi.SpiFaultException; import org.ariadne_eu.spidev.CreateIdentifier; import org.ariadne_eu.spidev.CreateIdentifierResponse; import org.ariadne_eu.spidev.DeleteMetadataRecord; import org.ariadne_eu.spidev.DeleteResource; import org.ariadne_eu.spidev.FaultCodeType; import org.ariadne_eu.spidev.SPIDevSkeleton; import org.ariadne_eu.spidev.SpiDevFault; import org.ariadne_eu.spidev.SpiDevFaultException; import org.ariadne_eu.spidev.SubmitMetadataRecord; import org.ariadne_eu.spidev.SubmitResource; import org.ariadne_eu.utils.config.RepositoryConstants; import org.safehaus.uuid.EthernetAddress; import org.safehaus.uuid.UUID; import org.safehaus.uuid.UUIDGenerator; import be.cenorm.www.SessionExpiredException; import be.cenorm.www.Ticket; /** * Created by ben Date: 6-jan-2007 Time: 17:18:57 To change this template use * File | Settings | File Templates. */ public class SPIDevImplementation extends SPIDevSkeleton { private static Logger log = Logger.getLogger(SPIDevImplementation.class); public void deleteResource(DeleteResource deleteResource) throws SpiDevFaultException { log.info("deleteResource:identifier=" + deleteResource.getGlobalIdentifier() + ",sessionID=" + deleteResource.getTargetSessionID()); SpiDevFault fault = new SpiDevFault(); fault.setSpiDevFaultCode(FaultCodeType.SPIDev_00000); fault.setMessage("Method not supported: deleteResource"); SpiDevFaultException exception = new SpiDevFaultException(); exception.setFaultMessage(fault); throw exception; } public void deleteMetadataRecord(DeleteMetadataRecord deleteMetadataRecord) throws SpiDevFaultException { try { log.info("deleteMetadataRecord:identifier=" + deleteMetadataRecord.getGlobalIdentifier() + ",sessionID=" + deleteMetadataRecord.getTargetSessionID()); Ticket ticket = Ticket.getTicket(deleteMetadataRecord.getTargetSessionID()); checkValidTicket(ticket); DeleteMetadataFactory.deleteMetadata(deleteMetadataRecord.getGlobalIdentifier()); } catch (SessionExpiredException e) { log.error("deleteMetadataRecord:identifier=" + deleteMetadataRecord.getGlobalIdentifier() + ",sessionID=" + deleteMetadataRecord.getTargetSessionID()); SpiDevFault fault = new SpiDevFault(); fault.setSpiDevFaultCode(FaultCodeType.SPIDev_00000); fault.setMessage("The given session ID is invalid"); SpiDevFaultException exception = new SpiDevFaultException(); exception.setFaultMessage(fault); throw exception; } } public CreateIdentifierResponse createIdentifier(CreateIdentifier createIdentifier) throws SpiDevFaultException { try { log.info("createIdentifier:sessionID=" + createIdentifier.getTargetSessionID()); // throws exception if no valid ticket exists Ticket ticket = Ticket.getTicket(createIdentifier.getTargetSessionID()); checkValidTicket(ticket); UUIDGenerator uuidGenerator = UUIDGenerator.getInstance(); EthernetAddress ethernetAddress = uuidGenerator.getDummyAddress(); UUID uuid = uuidGenerator.generateTimeBasedUUID(ethernetAddress); CreateIdentifierResponse response = new CreateIdentifierResponse(); response.setLocalIdentifier(uuid.toString()); log.info("createIdentifier:identifier=" + response.getLocalIdentifier() + ",sessionID=" + createIdentifier.getTargetSessionID()); return response; } catch (SessionExpiredException e) { log.debug("createIdentifier: ", e); SpiDevFault fault = new SpiDevFault(); fault.setSpiDevFaultCode(FaultCodeType.SPIDev_00000); fault.setMessage("The given session ID is invalid"); SpiDevFaultException exception = new SpiDevFaultException(); exception.setFaultMessage(fault); throw exception; } } public void submitResource(SubmitResource submitResource) throws SpiDevFaultException { try { log.info("submitResource:identifier=" + submitResource.getGlobalIdentifier() + ",sessionID=" + submitResource.getTargetSessionID()); //throws exception if no valid ticket exists Ticket ticket = Ticket.getTicket(submitResource.getTargetSessionID()); checkValidTicket(ticket); /* boolean success = */InsertContentFactory.insertContent(submitResource.getGlobalIdentifier(), submitResource.getBinaryData().getBase64Binary(), submitResource.getFileName(), submitResource.getFileType()); // if (!success) { // log.warn("submitResource:identifier="+submitResource.getGlobalIdentifier()+",sessionID="+submitResource.getTargetSessionID()+ // " submit failed"); // SpiFault fault = new SpiFault(); // fault.setSpiFaultCode(SpiFaultCodeType.SPI_00000); // fault.setMessage("Method not supported: submitResource"); // SpiFaultException exception = new SpiFaultException(); // exception.setFaultMessage(fault); // throw exception; // } } catch (SessionExpiredException e) { log.debug("submitResource: ", e); SpiDevFault fault = new SpiDevFault(); fault.setSpiDevFaultCode(FaultCodeType.SPIDev_00000); fault.setMessage("The given session ID is invalid"); SpiDevFaultException exception = new SpiDevFaultException(); exception.setFaultMessage(fault); throw exception; } } public void submitMetadataRecord(SubmitMetadataRecord submitMetadataRecord) throws SpiDevFaultException { try { log.info("submitMetadataRecord:identifier=" + submitMetadataRecord.getGlobalIdentifier() + ",sessionID=" + submitMetadataRecord.getTargetSessionID()); // throws exception if no valid ticket exists Ticket ticket = Ticket.getTicket(submitMetadataRecord.getTargetSessionID()); checkValidTicket(ticket); InsertMetadataFactory.insertMetadata(submitMetadataRecord.getGlobalIdentifier(), submitMetadataRecord.getMetadata(), submitMetadataRecord.getCollection()); // } catch (XMLDBException e) { // log.error("submitMetadataRecord: ", e); } catch (SessionExpiredException e) { log.debug("submitMetadataRecord: ", e); SpiDevFault fault = new SpiDevFault(); fault.setSpiDevFaultCode(FaultCodeType.SPIDev_00000); fault.setMessage("The given session ID is invalid"); SpiDevFaultException exception = new SpiDevFaultException(); exception.setFaultMessage(fault); throw exception; } catch (InsertMetadataException e) { log.error("submitMetadataRecord: ", e); SpiDevFault fault = new SpiDevFault(); fault.setSpiDevFaultCode(FaultCodeType.SPIDev_00000); fault.setMessage("Insertion has not been executed"); SpiDevFaultException exception = new SpiDevFaultException(); exception.setFaultMessage(fault); throw exception; } } public void setDataFormat(java.lang.String targetSessionID, java.lang.String dataFormatID) throws SpiDevFaultException { } private void checkValidTicket(Ticket ticket) throws SpiDevFaultException { if (ticket.getParameter("username") == null || !ticket.getParameter("username").equalsIgnoreCase(PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().REPO_USERNAME)) || ticket.getParameter("password") == null || !ticket.getParameter("password").equalsIgnoreCase(PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().REPO_PASSWORD))) { SpiDevFault fault = new SpiDevFault(); fault.setSpiDevFaultCode(FaultCodeType.SPIDev_00000); fault.setMessage("The given session ID is invalid"); SpiDevFaultException exception = new SpiDevFaultException(); exception.setFaultMessage(fault); throw exception; } } }