| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 org.apache.ofbiz.webtools.artifactinfo; |
| |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.TreeSet; |
| |
| import org.apache.ofbiz.base.location.FlexibleLocation; |
| import org.apache.ofbiz.base.util.GeneralException; |
| import org.apache.ofbiz.base.util.UtilMisc; |
| import org.apache.ofbiz.service.eca.ServiceEcaAction; |
| import org.apache.ofbiz.service.eca.ServiceEcaCondition; |
| import org.apache.ofbiz.service.eca.ServiceEcaRule; |
| |
| /** |
| * |
| */ |
| public class ServiceEcaArtifactInfo extends ArtifactInfoBase { |
| protected ServiceEcaRule serviceEcaRule; |
| protected String displayPrefix = null; |
| protected int displaySuffixNum = 0; |
| |
| protected Set<ServiceArtifactInfo> servicesCalledByThisServiceEca = new TreeSet<ServiceArtifactInfo>(); |
| |
| public ServiceEcaArtifactInfo(ServiceEcaRule serviceEcaRule, ArtifactInfoFactory aif) throws GeneralException { |
| super(aif); |
| this.serviceEcaRule = serviceEcaRule; |
| } |
| |
| /** |
| * This must be called after creation from the ArtifactInfoFactory after this class has been put into the global Map in order to avoid recursive initialization |
| * |
| * @throws GeneralException |
| */ |
| public void populateAll() throws GeneralException { |
| // populate the services called Set |
| for (ServiceEcaAction ecaAction: serviceEcaRule.getEcaActionList()) { |
| servicesCalledByThisServiceEca.add(aif.getServiceArtifactInfo(ecaAction.getServiceName())); |
| UtilMisc.addToSortedSetInMap(this, aif.allServiceEcaInfosReferringToServiceName, ecaAction.getServiceName()); |
| } |
| } |
| |
| @Override |
| public String getDisplayName() { |
| return this.getDisplayPrefixedName(); |
| } |
| |
| @Override |
| public String getDisplayType() { |
| return "Service ECA"; |
| } |
| |
| @Override |
| public String getType() { |
| return ArtifactInfoFactory.ServiceEcaInfoTypeId; |
| } |
| |
| @Override |
| public String getUniqueId() { |
| return this.serviceEcaRule.toString(); |
| } |
| |
| @Override |
| public URL getLocationURL() throws MalformedURLException { |
| return FlexibleLocation.resolveLocation(this.serviceEcaRule.getDefinitionLocation(), null); |
| } |
| |
| public ServiceEcaRule getServiceEcaRule() { |
| return this.serviceEcaRule; |
| } |
| |
| public void setDisplayPrefix(String displayPrefix) { |
| this.displayPrefix = displayPrefix; |
| } |
| |
| public void setDisplaySuffixNum(int displaySuffixNum) { |
| this.displaySuffixNum = displaySuffixNum; |
| } |
| |
| public String getDisplayPrefixedName() { |
| return (this.displayPrefix != null ? this.displayPrefix : "") + this.serviceEcaRule.getServiceName() + "_" + this.serviceEcaRule.getEventName() + "_" + displaySuffixNum; |
| } |
| |
| public Set<ServiceArtifactInfo> getServicesCalledByServiceEcaActions() { |
| return this.servicesCalledByThisServiceEca; |
| } |
| |
| public Set<ServiceArtifactInfo> getServicesTriggeringServiceEca() { |
| return aif.allServiceInfosReferringToServiceEcaRule.get(this.serviceEcaRule); |
| } |
| |
| public Map<String, Object> createEoModelMap(Set<ServiceArtifactInfo> triggeringServiceSet, Set<ServiceArtifactInfo> triggeredServiceSet, boolean useMoreDetailedNames) { |
| if (triggeringServiceSet == null) triggeringServiceSet = new HashSet<ServiceArtifactInfo>(); |
| if (triggeredServiceSet == null) triggeredServiceSet = new HashSet<ServiceArtifactInfo>(); |
| Map<String, Object> topLevelMap = new HashMap<String, Object>(); |
| |
| topLevelMap.put("name", this.getDisplayPrefixedName()); |
| topLevelMap.put("className", "EOGenericRecord"); |
| |
| // for classProperties add attribute names AND relationship names to get a nice, complete chart |
| List<String> classPropertiesList = new LinkedList<String>(); |
| topLevelMap.put("classProperties", classPropertiesList); |
| // conditions |
| for (ServiceEcaCondition ecaCondition: this.serviceEcaRule.getEcaConditionList()) { |
| classPropertiesList.add(ecaCondition.getShortDisplayDescription(useMoreDetailedNames)); |
| } |
| // actions |
| for (ServiceEcaAction ecaAction: this.serviceEcaRule.getEcaActionList()) { |
| if (useMoreDetailedNames) { |
| classPropertiesList.add(ecaAction.getShortDisplayDescription()); |
| } else { |
| classPropertiesList.add(ecaAction.getServiceName()); |
| } |
| } |
| |
| /* going to try this without any attributes... |
| // attributes |
| List<Map<String, Object>> attributesList = new LinkedList(); |
| topLevelMap.put("attributes", attributesList); |
| for (ModelParam param: this.modelService.getModelParamList()) { |
| Map<String, Object> attributeMap = new HashMap(); |
| attributesList.add(attributeMap); |
| |
| if (useMoreDetailedNames) { |
| attributeMap.put("name", param.getShortDisplayDescription()); |
| } else { |
| attributeMap.put("name", param.name); |
| } |
| attributeMap.put("valueClassName", param.type); |
| attributeMap.put("externalType", param.type); |
| } |
| */ |
| |
| // relationships |
| List<Map<String, Object>> relationshipsMapList = new LinkedList<Map<String,Object>>(); |
| |
| for (ServiceArtifactInfo sai: triggeringServiceSet) { |
| Map<String, Object> relationshipMap = new HashMap<String, Object>(); |
| relationshipsMapList.add(relationshipMap); |
| |
| relationshipMap.put("name", sai.getDisplayPrefixedName()); |
| relationshipMap.put("destination", sai.getDisplayPrefixedName()); |
| relationshipMap.put("isToMany", "N"); |
| relationshipMap.put("isMandatory", "Y"); |
| } |
| for (ServiceArtifactInfo sai: triggeredServiceSet) { |
| Map<String, Object> relationshipMap = new HashMap<String, Object>(); |
| relationshipsMapList.add(relationshipMap); |
| |
| relationshipMap.put("name", sai.getDisplayPrefixedName()); |
| relationshipMap.put("destination", sai.getDisplayPrefixedName()); |
| relationshipMap.put("isToMany", "Y"); |
| relationshipMap.put("isMandatory", "Y"); |
| } |
| |
| if (relationshipsMapList.size() > 0) { |
| topLevelMap.put("relationships", relationshipsMapList); |
| } |
| |
| return topLevelMap; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (obj instanceof ServiceEcaArtifactInfo) { |
| ServiceEcaArtifactInfo that = (ServiceEcaArtifactInfo) obj; |
| return this.serviceEcaRule.equals(that.serviceEcaRule); |
| } else { |
| return false; |
| } |
| } |
| } |