/*
* Copyright 2014 Red Hat, Inc. and/or its affiliates.
*
* 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 org.jbpm.kie.services.impl;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.drools.core.util.StringUtils;
import org.jbpm.kie.services.api.AttributesAware;
import org.jbpm.services.api.model.DeploymentUnit;
import org.kie.api.runtime.KieContainer;
import org.kie.internal.runtime.conf.DeploymentDescriptor;
import org.kie.internal.runtime.conf.MergeMode;
import org.kie.internal.runtime.conf.RuntimeStrategy;
public class KModuleDeploymentUnit implements DeploymentUnit, AttributesAware, Serializable {
private static final long serialVersionUID = 1L;
private String artifactId;
private String groupId;
private String version;
private String kbaseName;
private String ksessionName;
private RuntimeStrategy strategy = RuntimeStrategy.SINGLETON;
private MergeMode mergeMode = MergeMode.MERGE_COLLECTIONS;
private DeploymentDescriptor deploymentDescriptor;
private boolean deployed = false;
private boolean strategyUnset = true;
private transient KieContainer kieContainer;
private Map<String, String> attributes = new HashMap<String, String>();
public KModuleDeploymentUnit(String groupId, String artifactId, String version) {
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
}
public KModuleDeploymentUnit(String groupId, String artifactId, String version, String kbaseName, String ksessionName) {
this(groupId, artifactId, version);
this.kbaseName = kbaseName;
this.ksessionName = ksessionName;
}
public KModuleDeploymentUnit(String groupId, String artifactId, String version, String kbaseName, String ksessionName,
String strategy) {
this(groupId, artifactId, version, kbaseName, ksessionName);
this.strategy = RuntimeStrategy.valueOf(strategy);
this.strategyUnset = false;
}
@Override
public String getIdentifier() {
String id = getGroupId() + ":" + getArtifactId() + ":" + getVersion();
boolean kbaseFilled = !StringUtils.isEmpty(kbaseName);
boolean ksessionFilled = !StringUtils.isEmpty(ksessionName);
if( kbaseFilled || ksessionFilled) {
id = id.concat(":");
if( kbaseFilled ) {
id = id.concat(kbaseName);
}
if( ksessionFilled ) {
id = id.concat(":" + ksessionName);
}
}
return id;
}
@Override
public RuntimeStrategy getStrategy() {
return strategy;
}
public void setStrategy(RuntimeStrategy strategy) {
if (strategyUnset) {
this.strategy = strategy;
this.strategyUnset = false;
}
}
public String getArtifactId() {
return artifactId;
}
public void setArtifactId(String artifactId) {
this.artifactId = artifactId;
}
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getKsessionName() {
return ksessionName;
}
public void setKsessionName(String ksessionName) {
this.ksessionName = ksessionName;
}
public String getKbaseName() {
return kbaseName;
}
public void setKbaseName(String kbaseName) {
this.kbaseName = kbaseName;
}
@Override
public String toString() {
return getIdentifier() + " [strategy=" + strategy + "]";
}
public MergeMode getMergeMode() {
if (mergeMode == null) {
mergeMode = MergeMode.MERGE_COLLECTIONS;
}
return mergeMode;
}
public void setMergeMode(MergeMode mergeMode) {
this.mergeMode = mergeMode;
}
public DeploymentDescriptor getDeploymentDescriptor() {
return deploymentDescriptor;
}
public void setDeploymentDescriptor(DeploymentDescriptor deploymentDescriptor) {
this.deploymentDescriptor = deploymentDescriptor;
}
public boolean isDeployed() {
return deployed;
}
public void setDeployed(boolean deployed) {
this.deployed = deployed;
}
public void resetStrategy() {
this.strategyUnset = true;
}
@Override
public void addAttribute(String name, String value) {
this.attributes.put(name, value);
}
@Override
public String removeAttribute(String name) {
return this.attributes.remove(name);
}
@Override
public Map<String, String> getAttributes() {
if (this.attributes == null){
return Collections.EMPTY_MAP;
}
return Collections.unmodifiableMap(this.attributes);
}
public KieContainer getKieContainer() {
return kieContainer;
}
public void setKieContainer(KieContainer kieContainer) {
this.kieContainer = kieContainer;
}
}