Java tutorial
/* * CTS2 based Terminology Server and Terminology Browser * Copyright (C) 2014 FH Dortmund: Peter Haas, Robert Muetzner * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.fhdo.terminologie.ws.conceptAssociation; import de.fhdo.logging.LoggingOutput; import de.fhdo.terminologie.Definitions; import de.fhdo.terminologie.db.HibernateUtil; import de.fhdo.terminologie.db.hibernate.AssociationType; import de.fhdo.terminologie.db.hibernate.CodeSystemEntityVersionAssociation; import de.fhdo.terminologie.ws.authorization.Authorization; import de.fhdo.terminologie.ws.authorization.types.AuthenticateInfos; import de.fhdo.terminologie.ws.conceptAssociation.types.MaintainConceptAssociationRequestType; import de.fhdo.terminologie.ws.conceptAssociation.types.MaintainConceptAssociationResponseType; import de.fhdo.terminologie.ws.types.ReturnType; import java.util.Date; import org.hibernate.ObjectNotFoundException; /** * * @author Nico Hnsch */ public class MaintainConceptAssociation { private static org.apache.log4j.Logger logger = de.fhdo.logging.Logger4j.getInstance().getLogger(); /** * Verndert eine Beziehung zwischen 2 Konzepten. * * @param parameter * @return */ public MaintainConceptAssociationResponseType MaintainConceptAssociation( MaintainConceptAssociationRequestType parameter, String ipAddress) { if (logger.isInfoEnabled()) logger.info("====== MaintainConceptAssociation gestartet ======"); // Return-Informationen anlegen MaintainConceptAssociationResponseType response = new MaintainConceptAssociationResponseType(); response.setReturnInfos(new ReturnType()); // Parameter prfen if (validateParameter(parameter, response) == false) { return response; // Fehler bei den Parametern } // Login-Informationen auswerten boolean loggedIn = false; AuthenticateInfos loginInfoType = null; if (parameter != null && parameter.getLoginToken() != null) { loginInfoType = Authorization.authenticate(ipAddress, parameter.getLoginToken()); loggedIn = loginInfoType != null; } if (logger.isDebugEnabled()) logger.debug("Benutzer ist eingeloggt: " + loggedIn); if (loggedIn == false) { // Benutzer muss fr diesen Webservice eingeloggt sein response.getReturnInfos().setOverallErrorCategory(ReturnType.OverallErrorCategory.WARN); response.getReturnInfos().setStatus(ReturnType.Status.OK); response.getReturnInfos().setMessage( "Sie mssen am Terminologieserver angemeldet sein, um diesen Service nutzen zu knnen."); return response; } try { long associationId = 0; // Hibernate-Block, Session ffnen org.hibernate.Session hb_session = HibernateUtil.getSessionFactory().openSession(); hb_session.getTransaction().begin(); // Neue CodeSystemEntityVersionAssociation CodeSystemEntityVersionAssociation cseva_New = parameter.getCodeSystemEntityVersionAssociation().get(0); CodeSystemEntityVersionAssociation cseva_db = new CodeSystemEntityVersionAssociation(); try { // 2. Try-Catch-Block zum Abfangen von Hibernate-Fehlern //Origianl CSEVA aus DB laden //TODO Prfen, ob Id vorhanden ist (Catch funktioniert nicht richtig, Fehler wird zu spt gefangen) try { cseva_db = (CodeSystemEntityVersionAssociation) hb_session .load(CodeSystemEntityVersionAssociation.class, cseva_New.getId()); } catch (ObjectNotFoundException e) { // Fehlermeldung an den Aufrufer weiterleiten response.getReturnInfos().setOverallErrorCategory(ReturnType.OverallErrorCategory.WARN); response.getReturnInfos().setStatus(ReturnType.Status.FAILURE); response.getReturnInfos() .setMessage("Keine CodeSystemEntityVersionAssociation mit der angegeben ID vorhanden."); logger.error(response.getReturnInfos().getMessage()); } // Beziehungen ndern // codeSystemEntityVersionByCodeSystemEntityVersionIdX neu erstellen //cseva_db.setCodeSystemEntityVersionByCodeSystemEntityVersionId1(null); -> nicht mehr mglich! //cseva_db.setCodeSystemEntityVersionByCodeSystemEntityVersionId2(null); -> nicht mehr mglich! // codeSystemEntityVersionByCodeSystemEntityVersionIdX zuweisen -> nicht mehr mglich! //cseva_db.setCodeSystemEntityVersionByCodeSystemEntityVersionId1(new CodeSystemEntityVersion()); //cseva_db.getCodeSystemEntityVersionByCodeSystemEntityVersionId1().setVersionId(cseva_New.getCodeSystemEntityVersionByCodeSystemEntityVersionId1().getVersionId()); //cseva_db.setCodeSystemEntityVersionByCodeSystemEntityVersionId2(new CodeSystemEntityVersion()); //cseva_db.getCodeSystemEntityVersionByCodeSystemEntityVersionId2().setVersionId(cseva_New.getCodeSystemEntityVersionByCodeSystemEntityVersionId2().getVersionId()); // Attribute ndern // cseva_db.setLeftId(cseva_New.getLeftId()); -> nicht mehr mglich! //cseva_db.setAssociationKind(cseva_New.getAssociationKind()); -> nicht mehr mglich! // AssociationType ndern, falls angegeben if (cseva_New.getAssociationType() != null) { //cseva_db.getAssociationType().setCodeSystemEntityVersionId(cseva_New.getAssociationType().getCodeSystemEntityVersionId()); cseva_db.setAssociationType(new AssociationType()); cseva_db.getAssociationType().setCodeSystemEntityVersionId( cseva_New.getAssociationType().getCodeSystemEntityVersionId()); } if (cseva_New.getLeftId() != null && cseva_New.getLeftId() > 0) { if (cseva_New.getLeftId().longValue() == cseva_db .getCodeSystemEntityVersionByCodeSystemEntityVersionId1().getVersionId().longValue() || cseva_New.getLeftId().longValue() == cseva_db .getCodeSystemEntityVersionByCodeSystemEntityVersionId2().getVersionId() .longValue()) { cseva_db.setLeftId(cseva_New.getLeftId()); } } if (cseva_New.getAssociationKind() != null && cseva_New.getAssociationKind() > 0) { cseva_db.setAssociationKind(cseva_New.getAssociationKind()); } cseva_db.setStatusDate(new Date()); // prfen, ob AssociationTypeId auch eine Association ist if (hb_session.get(AssociationType.class, cseva_db.getAssociationType().getCodeSystemEntityVersionId()) == null) { response.getReturnInfos().setOverallErrorCategory(ReturnType.OverallErrorCategory.WARN); response.getReturnInfos().setStatus(ReturnType.Status.FAILURE); response.getReturnInfos().setMessage( "Sie mssen eine gltige ID fr ein AssociationType angeben. Das Konzept mit der ID '" + cseva_db.getAssociationType().getCodeSystemEntityVersionId() + "' ist kein AssociationType!"); logger.info("ungltige ID fr AssociationType"); } else { // Beziehung abspeichern hb_session.merge(cseva_db); associationId = cseva_db.getId(); response.getReturnInfos().setCount(1); } } catch (Exception e) { // Fehlermeldung an den Aufrufer weiterleiten response.getReturnInfos().setOverallErrorCategory(ReturnType.OverallErrorCategory.ERROR); response.getReturnInfos().setStatus(ReturnType.Status.FAILURE); response.getReturnInfos().setMessage( "Fehler bei 'MaintainConceptAssociation', Hibernate: " + e.getLocalizedMessage()); logger.error(response.getReturnInfos().getMessage()); LoggingOutput.outputException(e, this); e.printStackTrace(); } finally { // Transaktion abschlieen if (associationId > 0) { hb_session.getTransaction().commit(); } else { // nderungen nicht erfolgreich logger.warn("[MaintainConceptAssociation.java] nderungen nicht erfolgreich"); hb_session.getTransaction().rollback(); } hb_session.close(); } if (associationId > 0) { // Status an den Aufrufer weitergeben response.getReturnInfos().setOverallErrorCategory(ReturnType.OverallErrorCategory.INFO); response.getReturnInfos().setStatus(ReturnType.Status.OK); response.getReturnInfos().setMessage("CodeSystemEntityVersionAssociation erfolgreich gendert. "); logger.info(response.getReturnInfos().getMessage()); } } catch (Exception e) { // Fehlermeldung an den Aufrufer weiterleiten response.getReturnInfos().setOverallErrorCategory(ReturnType.OverallErrorCategory.ERROR); response.getReturnInfos().setStatus(ReturnType.Status.FAILURE); response.getReturnInfos() .setMessage("Fehler bei 'MaintainConceptAssociation': " + e.getLocalizedMessage()); logger.error(response.getReturnInfos().getMessage()); } return response; } private boolean validateParameter(MaintainConceptAssociationRequestType Request, MaintainConceptAssociationResponseType Response) { boolean parameterValidiert = true; //Prfen ob Login bergeben wurde (KANN) if (Request.getLoginToken() == null || Request.getLoginToken().length() == 0) { Response.getReturnInfos().setMessage("Das Login-Token darf nicht leer sein!"); parameterValidiert = false; } if (Request.getCodeSystemEntityVersionAssociation() == null) { Response.getReturnInfos().setMessage("CodeSystemEntityVersionAssociation darf nicht NULL sein."); parameterValidiert = false; } else { if (Request.getCodeSystemEntityVersionAssociation().size() > 1) { Response.getReturnInfos() .setMessage("Es muss genau eine CodeSystemEntityVersionAssociation angegeben sein."); parameterValidiert = false; } else { CodeSystemEntityVersionAssociation csev = Request.getCodeSystemEntityVersionAssociation().get(0); if (csev.getId() == null || csev.getId() == 0) { Response.getReturnInfos().setMessage("Es muss eine ID der Beziehung angegeben sein!"); parameterValidiert = false; } else if (csev.getAssociationType() != null && csev.getAssociationType().getCodeSystemEntityVersionId() == 0) { Response.getReturnInfos().setMessage( "Wenn ein AssociationType angegeben wird muss auch eine codeSystemEntityVersionId angegeben werden."); parameterValidiert = false; } } } if (parameterValidiert == false) { Response.getReturnInfos().setOverallErrorCategory(ReturnType.OverallErrorCategory.WARN); Response.getReturnInfos().setStatus(ReturnType.Status.FAILURE); } return parameterValidiert; } }