package org.jboss.as.jacorb; import java.util.LinkedList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jboss.as.controller.AttributeDefinition; import org.jboss.dmr.ModelNode; import org.jboss.dmr.ModelType; import org.jboss.dmr.Property; import org.jboss.dmr.ValueExpression; import org.wildfly.iiop.openjdk.Constants; /** * @author <a href=mailto:tadamski@redhat.com>Tomasz Adamski</a> */ public class TransformUtils { private TransformUtils() { } static List<String> validateDeprecatedProperites(final ModelNode model) { final List<String> propertiesToReject = new LinkedList<>(); for (final AttributeDefinition attribute : JacORBSubsystemDefinitions.ON_OFF_ATTRIBUTES_TO_REJECT) { if (model.hasDefined(attribute.getName()) && model.get(attribute.getName()).equals(JacORBSubsystemDefinitions.DEFAULT_ENABLED_PROPERTY)) { propertiesToReject.add(attribute.getName()); } } for (final AttributeDefinition attribute : JacORBSubsystemDefinitions.ATTRIBUTES_TO_REJECT) { if (model.hasDefined(attribute.getName())) { propertiesToReject.add(attribute.getName()); } } return propertiesToReject; } static ModelNode transformModel(final ModelNode legacyModel) { final ModelNode model = new ModelNode(); for (Property property : legacyModel.asPropertyList()) { String name = property.getName(); ModelNode legacyValue = property.getValue(); if (legacyValue.isDefined()) { if(name.equals(JacORBSubsystemConstants.IOR_SETTINGS)){ transformIorSettings(model, legacyValue); continue; } final boolean expression; final String expressionVariable; if(legacyValue.getType()==ModelType.EXPRESSION){ expression = true; final Matcher matcher = Pattern.compile("\\A\\$\\{(.*):(.*)\\}\\Z").matcher(legacyValue.asExpression().getExpressionString()); if(matcher.find()){ expressionVariable = matcher.group(1); String abc = matcher.group(2); legacyValue = new ModelNode(abc); } else { model.get(name).set(legacyValue); continue; } } else { expression = false; expressionVariable = null; } ModelNode value; switch (name) { case JacORBSubsystemConstants.ORB_GIOP_MINOR_VERSION: name = Constants.ORB_GIOP_VERSION; value = new ModelNode(new StringBuilder().append("1.").append(legacyValue.asString()).toString()); break; case JacORBSubsystemConstants.ORB_INIT_TRANSACTIONS: if (legacyValue.asString().equals(JacORBSubsystemConstants.ON)) { value = new ModelNode(Constants.FULL); } else if (legacyValue.asString().equals(JacORBSubsystemConstants.OFF)) { value = new ModelNode(Constants.NONE); } else { value = legacyValue; } break; case JacORBSubsystemConstants.ORB_INIT_SECURITY: if (legacyValue.asString().equals(JacORBSubsystemConstants.OFF)) { value = new ModelNode(Constants.NONE); } else { value = legacyValue; } break; case JacORBSubsystemConstants.SECURITY_SUPPORT_SSL: case JacORBSubsystemConstants.SECURITY_ADD_COMP_VIA_INTERCEPTOR: case JacORBSubsystemConstants.NAMING_EXPORT_CORBALOC: if (legacyValue.asString().equals(JacORBSubsystemConstants.ON)) { value = new ModelNode(true); } else { value = new ModelNode(false); } break; default: value = legacyValue; } if (!value.asString().equals(JacORBSubsystemConstants.OFF)) { if (expression) { String newExpression = "${" + expressionVariable; if(expressionVariable != null){ newExpression += (":" + value.asString()); } newExpression += "}"; value = new ModelNode(new ValueExpression(newExpression)); } model.get(name).set(value); } } } return model; } private static void transformIorSettings(final ModelNode model, final ModelNode legacyValue) { for (final Property category : legacyValue.get(JacORBSubsystemConstants.DEFAULT).get(JacORBSubsystemConstants.SETTING) .asPropertyList()) { for (final Property property : category.getValue().asPropertyList()) { model.get(property.getName()).set(property.getValue()); } } } }