Java tutorial
/*L * Copyright Oracle Inc, SAIC-F * * Distributed under the OSI-approved BSD 3-Clause License. * See http://ncip.github.com/cadsr-uml-model-browser/LICENSE.txt for details. */ package gov.nih.nci.ncicb.cadsr.service.impl; import gov.nih.nci.cadsr.domain.ClassificationScheme; import gov.nih.nci.cadsr.domain.ClassificationSchemeRelationship; import gov.nih.nci.cadsr.domain.Context; import gov.nih.nci.cadsr.umlproject.domain.Project; import gov.nih.nci.cadsr.umlproject.domain.SubProject; import gov.nih.nci.cadsr.umlproject.domain.UMLAttributeMetadata; import gov.nih.nci.cadsr.umlproject.domain.UMLClassMetadata; import gov.nih.nci.cadsr.umlproject.domain.UMLPackageMetadata; import gov.nih.nci.ncicb.cadsr.service.UMLBrowserQueryService; import gov.nih.nci.ncicb.cadsr.servicelocator.ApplicationServiceLocator; import gov.nih.nci.ncicb.cadsr.umlmodelbrowser.dto.SearchPreferences; import gov.nih.nci.ncicb.cadsr.util.UMLBrowserParams; import gov.nih.nci.system.applicationservice.ApplicationService; import gov.nih.nci.system.query.hibernate.HQLCriteria; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Expression; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; public class UMLBrowserQueryServiceImpl implements UMLBrowserQueryService { public UMLBrowserQueryServiceImpl() { } private ApplicationService service = null; private ApplicationServiceLocator serviceLocator = null; private Context testContext = null; private Context trainingContext = null; private Log log = LogFactory.getLog(UMLBrowserQueryServiceImpl.class); protected Context getTestContext() throws Exception { if (testContext == null) { try { ApplicationService caCoreService = getCaCoreAPIService(); Context context = new Context(); UMLBrowserParams params = UMLBrowserParams.getInstance(); context.setName(params.getTestContext()); List contexts = caCoreService.search(Context.class, context); if (contexts.size() > 0) { testContext = (Context) contexts.get(0); } } catch (Exception e) { log.error("Error getting test context.", e); throw e; } } return testContext; } protected Context getTrainingContext() throws Exception { if (trainingContext == null) { try { ApplicationService caCoreService = getCaCoreAPIService(); Context context = new Context(); UMLBrowserParams params = UMLBrowserParams.getInstance(); context.setName(params.getTrainingContext()); List contexts = caCoreService.search(Context.class, context); if (contexts.size() > 0) { trainingContext = (Context) contexts.get(0); } } catch (Exception e) { log.error("Error getting test context.", e); throw e; } } return trainingContext; } protected DetachedCriteria applyContextSearchPreferences(SearchPreferences searchPreferences, DetachedCriteria detachedCriteria) throws Exception { if (searchPreferences != null) { if (searchPreferences.isExcludeTestContext()) { Context testContext = getTestContext(); if ((testContext != null) && (testContext.getId() != null)) { detachedCriteria.add(Expression.ne("id", testContext.getId())); } } if (searchPreferences.isExcludeTrainingContext()) { Context trainingContext = getTrainingContext(); if ((trainingContext != null) && (trainingContext.getId() != null)) { detachedCriteria.add(Expression.ne("id", trainingContext.getId())); } } } return detachedCriteria; } /** * Retrieves all contexts * * @param * * @return List of Context objects * * @throws java.lang.Exception */ public List<Context> getAllContexts() throws Exception { DetachedCriteria contextCriteria = DetachedCriteria.forClass(Context.class); contextCriteria.addOrder(Order.asc("name").ignoreCase()); ApplicationService caCoreService = getCaCoreAPIService(); List results = caCoreService.query(contextCriteria); //caCoreService.query(contextCriteria, Context.class.getName()); return results; } public List<Context> getAllContexts(SearchPreferences searchPreferences) throws Exception { DetachedCriteria contextCriteria = DetachedCriteria.forClass(Context.class); applyContextSearchPreferences(searchPreferences, contextCriteria); contextCriteria.addOrder(Order.asc("name").ignoreCase()); ApplicationService caCoreService = getCaCoreAPIService(); List results = caCoreService.query(contextCriteria); //caCoreService.query(contextCriteria, Context.class.getName()); return results; } public List<Project> getAllProjects() throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria projectCriteria = DetachedCriteria.forClass(Project.class); projectCriteria.addOrder(Order.asc("longName").ignoreCase()); /*DetachedCriteria csCriteria = projectCriteria.createCriteria("classificationScheme"); csCriteria.add(Expression.eq("workflowStatusName", "RELEASED"));*/ List results = caCoreService.query(projectCriteria); //caCoreService.query(projectCriteria, Project.class.getName()); return results; } public List<Project> getAllProjects(SearchPreferences searchPreferences) throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria projectCriteria = DetachedCriteria.forClass(Project.class); DetachedCriteria contextCriteria = projectCriteria.createCriteria("classificationScheme") .createCriteria("context"); applyContextSearchPreferences(searchPreferences, contextCriteria); projectCriteria.addOrder(Order.asc("longName").ignoreCase()); List results = caCoreService.query(projectCriteria); //caCoreService.query(projectCriteria, Project.class.getName());; return results; } public List<Project> getProjectForContext(Context context) throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria projectCriteria = DetachedCriteria.forClass(Project.class); projectCriteria.addOrder(Order.asc("longName").ignoreCase()); if (context != null && context.getId().length() > 0) { DetachedCriteria csCri = projectCriteria.createCriteria("classificationScheme"); csCri.add(Expression.eq("latestVersionIndicator", "Yes")); DetachedCriteria contextCri = csCri.createCriteria("context"); contextCri.add(Expression.eq("id", context.getId())); } List results = caCoreService.query(projectCriteria); //caCoreService.query(projectCriteria, Project.class.getName());; return results; } public List<SubProject> getAllSubProjects() throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria subProjectCriteria = DetachedCriteria.forClass(SubProject.class); subProjectCriteria.addOrder(Order.asc("name").ignoreCase()); List results = caCoreService.query(subProjectCriteria); //caCoreService.query(subProjectCriteria, SubProject.class.getName());; return results; } public List<SubProject> getAllSubProjectsForProject(Project project) throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria subProjectCriteria = DetachedCriteria.forClass(SubProject.class); subProjectCriteria.addOrder(Order.asc("name").ignoreCase()); if (project != null && project.getId().length() > 0) { DetachedCriteria pjCri = subProjectCriteria.createCriteria("project"); pjCri.add(Expression.eq("id", project.getId())); } List results = caCoreService.query(subProjectCriteria); return results; } public List<SubProject> getAllSubProjects(SearchPreferences searchPreferences) throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria subProjectCriteria = DetachedCriteria.forClass(SubProject.class); DetachedCriteria contextCriteria = subProjectCriteria.createCriteria("project") .createCriteria("classificationScheme").createCriteria("context"); applyContextSearchPreferences(searchPreferences, contextCriteria); subProjectCriteria.addOrder(Order.asc("name").ignoreCase()); List results = caCoreService.query(subProjectCriteria); //caCoreService.query(subProjectCriteria, SubProject.class.getName());; return results; } public List<UMLPackageMetadata> getAllPackages() throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria subPackageCriteria = DetachedCriteria.forClass(UMLPackageMetadata.class); subPackageCriteria.addOrder(Order.asc("name").ignoreCase()); List results = caCoreService.query(subPackageCriteria); //caCoreService.query(subPackageCriteria, UMLPackageMetadata.class.getName());; return results; } public List<UMLPackageMetadata> getAllPackagesForSubProject(SubProject subProject) throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria pkgCriteria = DetachedCriteria.forClass(UMLPackageMetadata.class); pkgCriteria.addOrder(Order.asc("name").ignoreCase()); if (subProject != null && subProject.getId().length() > 0) { DetachedCriteria subpjCri = pkgCriteria.createCriteria("subProject"); subpjCri.add(Expression.eq("id", subProject.getId())); } List results = caCoreService.query(pkgCriteria); return results; } public List<UMLPackageMetadata> getAllPackages(SearchPreferences searchPreferences) throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria subPackageCriteria = DetachedCriteria.forClass(UMLPackageMetadata.class); DetachedCriteria contextCriteria = subPackageCriteria.createCriteria("project") .createCriteria("classificationScheme").createCriteria("context"); applyContextSearchPreferences(searchPreferences, contextCriteria); subPackageCriteria.addOrder(Order.asc("name").ignoreCase()); List results = caCoreService.query(subPackageCriteria); //caCoreService.query(subPackageCriteria, UMLPackageMetadata.class.getName());; return results; } public List<UMLClassMetadata> getAllClasses() throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria umlClassMetadataCriteria = DetachedCriteria.forClass(UMLClassMetadata.class); umlClassMetadataCriteria.addOrder(Order.asc("name").ignoreCase()); List results = caCoreService.query(umlClassMetadataCriteria); //caCoreService.query(umlClassMetadataCriteria, UMLClassMetadata.class.getName());; return results; } public List<UMLClassMetadata> getAllClasses(SearchPreferences searchPreferences) throws Exception { ApplicationService caCoreService = getCaCoreAPIService(); DetachedCriteria umlClassMetadataCriteria = DetachedCriteria.forClass(UMLClassMetadata.class); DetachedCriteria contextCriteria = umlClassMetadataCriteria.createCriteria("project") .createCriteria("classificationScheme").createCriteria("context"); applyContextSearchPreferences(searchPreferences, contextCriteria); umlClassMetadataCriteria.addOrder(Order.asc("name").ignoreCase()); List results = caCoreService.query(umlClassMetadataCriteria); //caCoreService.query(umlClassMetadataCriteria, UMLClassMetadata.class.getName());; return results; } public void setServiceLocator(ApplicationServiceLocator serviceLocator) { this.serviceLocator = serviceLocator; } public ApplicationServiceLocator getServiceLocator() { return serviceLocator; } protected ApplicationService getCaCoreAPIService() { if (service == null) service = serviceLocator.findCaCoreAPIService(); return service; } public List<UMLPackageMetadata> getAllPackageForProject(Project project) { List resultList = null; UMLPackageMetadata umlPkg = new UMLPackageMetadata(); Project proj = new Project(); proj.setId(project.getId()); umlPkg.setProject(proj); try { resultList = getCaCoreAPIService().search(UMLPackageMetadata.class, umlPkg); } catch (Exception e) { e.printStackTrace(); } return resultList; } public List<UMLClassMetadata> getClassesForContext(String contextId) { List resultList = null; try { DetachedCriteria classCriteria = DetachedCriteria.forClass(UMLClassMetadata.class); classCriteria.addOrder(Order.asc("name").ignoreCase()); if (contextId != null && contextId.length() > 0) { DetachedCriteria contextCri = classCriteria.createCriteria("project") .createCriteria("classificationScheme").createCriteria("context"); contextCri.add(Expression.eq("id", contextId)); } resultList = getCaCoreAPIService().query(classCriteria); //getCaCoreAPIService().query(classCriteria, UMLClassMetadata.class.getName()); } catch (Exception e) { e.printStackTrace(); } return resultList; } public List findUmlClass(UMLClassMetadata umlClass) { List resultList = null; try { resultList = getCaCoreAPIService().search(UMLClassMetadata.class, umlClass); } catch (Exception e) { e.printStackTrace(); } return resultList; } public List findUmlClassForContainer(String csId) throws Exception { //first get cs ClassificationScheme container = new ClassificationScheme(); container.setId(csId); List csResult = getCaCoreAPIService().search(ClassificationScheme.class, container); if (csResult != null) container = (ClassificationScheme) csResult.get(0); List resultList = new ArrayList(); //first get all project under this container List<String> projIds = getProjectIdsForContainer(container); if (projIds != null && projIds.size() > 0) { DetachedCriteria classCriteria = DetachedCriteria.forClass(UMLClassMetadata.class); DetachedCriteria projectCriteria = classCriteria.createCriteria("project"); projectCriteria.add(Restrictions.in("id", projIds)); resultList = getCaCoreAPIService().query(classCriteria); //getCaCoreAPIService().query(classCriteria, UMLClassMetadata.class.getName()); } return resultList; } public List findUmlClass(UMLClassMetadata umlClass, SearchPreferences searchPreferences) throws Exception { List resultList = null; try { DetachedCriteria classCriteria = DetachedCriteria.forClass(UMLClassMetadata.class); DetachedCriteria projectCriteria = classCriteria.createCriteria("project"); if (umlClass != null) { if (umlClass.getName() != null) { classCriteria.add(Restrictions.ilike("name", umlClass.getName())); } if (umlClass.getProject() != null) { Project project = umlClass.getProject(); if (project.getId() != null) projectCriteria.add(Restrictions.eq("id", project.getId())); if (project.getVersion() != null) projectCriteria.add(Restrictions.like("version", project.getVersion())); } if (umlClass.getUMLPackageMetadata() != null) { UMLPackageMetadata umlPackage = umlClass.getUMLPackageMetadata(); DetachedCriteria packageCriteria = classCriteria.createCriteria("UMLPackageMetadata"); if (umlPackage.getId() != null) packageCriteria.add(Restrictions.eq("id", umlPackage.getId())); if (umlPackage.getSubProject() != null) { SubProject subProject = umlPackage.getSubProject(); DetachedCriteria subProjectCriteria = packageCriteria.createCriteria("subProject"); if (subProject.getId() != null) subProjectCriteria.add(Restrictions.eq("id", subProject.getId())); } } } //umlClas != null DetachedCriteria contextCriteria = projectCriteria.createCriteria("classificationScheme") .createCriteria("context"); applyContextSearchPreferences(searchPreferences, contextCriteria); resultList = getCaCoreAPIService().query(classCriteria); //getCaCoreAPIService().query(classCriteria, UMLClassMetadata.class.getName()); } catch (Exception e) { log.error(e); e.printStackTrace(); throw e; } return resultList; } public List findUmlAttributes(UMLAttributeMetadata umlAttribute) { List resultList = null; try { resultList = getCaCoreAPIService().search(UMLAttributeMetadata.class, umlAttribute); } catch (Exception e) { e.printStackTrace(); } return resultList; } public List findUmlAttributes(UMLAttributeMetadata umlAttribute, SearchPreferences searchPreferences) throws Exception { List resultList = null; List subresultList = null; try { DetachedCriteria attributeCriteria = DetachedCriteria.forClass(UMLAttributeMetadata.class); DetachedCriteria projectCriteria = attributeCriteria.createCriteria("project"); DetachedCriteria classCriteria = null; DetachedCriteria contextCriteria = projectCriteria.createCriteria("classificationScheme") .createCriteria("context"); if (umlAttribute != null) { UMLClassMetadata umlClass = umlAttribute.getUMLClassMetadata(); if (umlAttribute.getName() != null) { attributeCriteria.add(Restrictions.ilike("name", umlAttribute.getName())); } if ((umlClass != null) && (umlClass.getName() != null)) { //Fix for GF 15450, When API is fixed this code can be removed to use DetachedCriteria String hqlQuery = ""; hqlQuery = "from gov.nih.nci.cadsr.umlproject.domain.UMLAttributeMetadata att where Lower(att.UMLClassMetadata.name) like Lower('" + umlClass.getName() + "')"; HQLCriteria attributeHQLCriteria = new HQLCriteria(hqlQuery); try { subresultList = getCaCoreAPIService().query(attributeHQLCriteria); } catch (Exception e) { log.error(e); throw e; } return subresultList; //End of GF15450 fix /* classCriteria = attributeCriteria.createCriteria("UMLClassMetadata"); classCriteria.add(Restrictions.ilike("name",umlClass.getName()));*/ } if ((umlClass != null) && (umlClass.getProject() != null)) { Project project = umlClass.getProject(); if (project.getId() != null) projectCriteria.add(Restrictions.eq("id", project.getId())); if (project.getVersion() != null) projectCriteria.add(Restrictions.eq("version", project.getVersion())); } if ((umlClass != null) && (umlClass.getUMLPackageMetadata() != null)) { UMLPackageMetadata umlPackage = umlClass.getUMLPackageMetadata(); if (classCriteria == null) { classCriteria = attributeCriteria.createCriteria("UMLClassMetadata"); } DetachedCriteria packageCriteria = classCriteria.createCriteria("UMLPackageMetadata"); if (umlPackage.getId() != null) packageCriteria.add(Restrictions.eq("id", umlPackage.getId())); if (umlPackage.getSubProject() != null) { DetachedCriteria subProjectCriteria = packageCriteria.createCriteria("subProject"); SubProject subProject = umlPackage.getSubProject(); if (subProject.getId() != null) subProjectCriteria.add(Restrictions.eq("id", subProject.getId())); } } } //umlAttribute != null applyContextSearchPreferences(searchPreferences, contextCriteria); resultList = getCaCoreAPIService().query(attributeCriteria); //getCaCoreAPIService().query(attributeCriteria, UMLAttributeMetadata.class.getName()); } catch (Exception e) { log.error(e); throw e; } return resultList; } public List findProject(Project project) { List resultList = null; try { resultList = getCaCoreAPIService().search(Project.class, project); } catch (Exception e) { e.printStackTrace(); } return resultList; } public List<ClassificationScheme> findAllCSContainers() throws Exception { DetachedCriteria csCriteria = DetachedCriteria.forClass(ClassificationScheme.class); csCriteria.add(Restrictions.eq("type", "Container")); csCriteria.add(Restrictions.eq("workflowStatusName", "RELEASED")); csCriteria.addOrder(Order.asc("longName").ignoreCase()); List results = getCaCoreAPIService().query(csCriteria); //getCaCoreAPIService().query(csCriteria, ClassificationScheme.class.getName()); return results; } public List<String> getProjectIdsForContainer(ClassificationScheme container) { List<String> result = new ArrayList<String>(); Iterator<ClassificationSchemeRelationship> childIter = container .getParentClassificationSchemeRelationshipCollection().iterator(); while (childIter.hasNext()) { ClassificationSchemeRelationship childRel = childIter.next(); if (childRel.getName().equalsIgnoreCase("HAS_A")) { ClassificationScheme childCs = childRel.getChildClassificationScheme(); if (childCs.getType().equalsIgnoreCase("Container")) result.addAll(this.getProjectIdsForContainer(childCs)); else if (childCs.getType().equalsIgnoreCase("Project")) { result.add(childCs.getId()); } } } return result; } }