package com.isencia.passerelle.editor.common.utils;
import java.io.File;
import java.util.Date;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import ptolemy.data.BooleanToken;
import ptolemy.data.Token;
import ptolemy.data.expr.FileParameter;
import ptolemy.data.expr.Parameter;
import ptolemy.data.expr.Variable;
import ptolemy.data.type.BaseType;
import ptolemy.kernel.util.Attribute;
import ptolemy.kernel.util.IllegalActionException;
import ptolemy.kernel.util.NamedObj;
import ptolemy.kernel.util.Settable;
import com.isencia.passerelle.actor.dynaport.DynamicNamedOutputPortsActor;
import com.isencia.passerelle.util.ptolemy.DateTimeParameter;
import com.isencia.passerelle.util.ptolemy.ParameterGroup;
public class ParameterUtils {
public static final String MULTI_CHECKBOX = "multiCheckbox";
public static final String COMBO = "combo";
public static final String CHECKBOX = "checkbox";
public static final String TEXT_AREA = "TextArea";
public static final String GROUP = "Group";
public static final String TABLE = "table";
public static final String RENDER_CANVAS = "renderCanvas";
public static final String RELOAD_PARAMETERS = "reloadParameters";
public static final String CHANGE_ATTRIBUTES = "changeAttributes";
private static boolean isValidCharacter(String substring) {
String trim = substring.trim();
if (StringUtils.isEmpty(trim)) {
return true;
}
return false;
}
public static Class getType(Parameter parameter) {
// Boolean
if (parameter instanceof Variable && (((Variable) parameter).getDeclaredType() == BaseType.BOOLEAN || isCheckbox(parameter))) {
return Boolean.class;
} else if (parameter instanceof FileParameter) {
return File.class;
} else if (parameter instanceof DateTimeParameter) {
return Date.class;
} else
return String.class;
}
public static ParameterGroup getConfigParameter(NamedObj namedObj) {
for (Object attr : namedObj.attributeList()) {
if (attr instanceof ParameterGroup) {
ParameterGroup group = (ParameterGroup) attr;
if (isTable(group)) {
return group;
}
}
}
return null;
}
public static Parameter getParameter(NamedObj no, String name) {
Parameter parameter = null;
try {
return (Parameter) no.getAttribute(name, Parameter.class);
} catch (IllegalActionException e) {
}
return null;
}
public static String getParameterValue(NamedObj no, String name) {
Parameter parameter = getParameter(no, name);
if (parameter != null)
return parameter.getExpression();
return null;
}
public static Object getValue(Parameter parameter) {
// Boolean
if (parameter instanceof Variable && ((Variable) parameter).getDeclaredType() == BaseType.BOOLEAN) {
try {
Token current = ((Variable) parameter).getToken();
if (parameter.getExpression().equals("true") || parameter.getExpression().equals("false")) {
return ((BooleanToken) current).booleanValue();
}
} catch (IllegalActionException e) {
}
return false;
} else if (parameter instanceof DateTimeParameter) {
return ((DateTimeParameter) parameter).getDateValue();
} else
return parameter.getExpression();
}
public static void setValue(Parameter parameter, Object value) {
// Boolean
if (parameter == null) {
return;
}
if (value == null) {
parameter.setExpression("");
return;
}
if (parameter instanceof Variable && ((Variable) parameter).getDeclaredType() == BaseType.BOOLEAN) {
parameter.setExpression(value.toString());
// Date
} else if (parameter instanceof DateTimeParameter) {
((DateTimeParameter) parameter).setDateValue((Date) value);
// Other
} else
parameter.setExpression(value.toString());
try {
parameter.propagateValue();
parameter.propagateValues();
} catch (IllegalActionException e) {
}
}
public static String generateActorName(String name, NamedObj entity) {
if (entity.getContainer() == null) {
return name;
}
if (entity.getContainer().getContainer() != null)
return generateActorName(entity.getContainer().getName() + "." + name, entity.getContainer());
else
return generateActorName(name, entity.getContainer());
}
public static boolean shouldRender(ptolemy.data.expr.Parameter parameter) {
if (parameter.getContainer() instanceof DynamicNamedOutputPortsActor) {
return true;
}
return parameter.getAttribute(RENDER_CANVAS) != null;
}
public static boolean shouldLoadParameters(ptolemy.data.expr.Parameter parameter) {
return parameter.getAttribute(RELOAD_PARAMETERS) != null;
}
public static boolean shouldchangeAttributes(ptolemy.data.expr.Parameter parameter) {
return parameter.getAttribute(CHANGE_ATTRIBUTES) != null;
}
public static boolean isCombo(ptolemy.data.expr.Parameter parameter) {
return parameter.getAttribute(COMBO) != null || (parameter.getContainer() instanceof ParameterGroup && ParameterUtils.isTable((ParameterGroup) parameter.getContainer()));
}
public static boolean isCheckbox(ptolemy.data.expr.Parameter parameter) {
return parameter.getAttribute(CHECKBOX) != null;
}
public static boolean isTextArea(ptolemy.data.expr.Parameter parameter) {
return parameter.getAttribute(TEXT_AREA) != null || parameter.getAttribute("paramsTextArea") != null;
}
public static boolean isGroup(ptolemy.data.expr.Parameter parameter) {
return parameter instanceof ParameterGroup;
}
public static boolean isTable(ptolemy.data.expr.Parameter parameter) {
return parameter.getAttribute(TABLE) != null;
}
public static boolean isMultiCheckbox(ptolemy.data.expr.Parameter parameter) {
return parameter.getAttribute(MULTI_CHECKBOX) != null;
}
public static String[] getChoises(ptolemy.data.expr.Parameter parameter) {
String target = "target=" + parameter.getName();
NamedObj no = parameter.getContainer();
if (no instanceof com.isencia.passerelle.actor.Actor) {
com.isencia.passerelle.actor.Actor actor = (com.isencia.passerelle.actor.Actor) no;
Enumeration attributes = actor.getAttributes();
for (Object o : actor.attributeList()) {
if (o instanceof ptolemy.data.expr.Parameter && ((ptolemy.data.expr.Parameter) o).getAttribute(target) != null) {
String expression = ((ptolemy.data.expr.Parameter) o).getExpression();
if (StringUtils.isNotBlank(expression))
return expression.split(",");
}
}
}
if (no instanceof ParameterGroup) {
ParameterGroup pg = (ParameterGroup) no;
if (ParameterUtils.isTable(pg)) {
return pg.getChoices();
}
}
return null;
}
public static boolean isVisible(NamedObj target, Settable settable, boolean expert) {
if (settable.getVisibility() == Settable.FULL || settable.getVisibility() == Settable.NOT_EDITABLE) {
return true;
}
if ((settable.getVisibility() == Settable.EXPERT) && (target instanceof com.isencia.passerelle.actor.Actor)) {
return expert;
}
return false;
}
private static void initializeOptions(NamedObj entity) {
if (entity instanceof com.isencia.passerelle.actor.Actor) {
configureParameters((com.isencia.passerelle.actor.Actor) entity);
}
}
private static void configureParameters(com.isencia.passerelle.actor.Actor actor) {
if (actor.getOptionsFactory() != null) {
List parameters = actor.attributeList(Parameter.class);
for (Iterator iter = parameters.iterator(); iter.hasNext();) {
Parameter p = (Parameter) iter.next();
actor.getOptionsFactory().setOptionsForParameter(p);
}
}
}
public static boolean hasOptions(Attribute parameter) {
boolean b = parameter instanceof Parameter && ((Parameter) parameter).getChoices() != null && ((Parameter) parameter).getChoices().length > 0;
if (b)
return true;
return false;
}
}