/*
* Copyright 2016 JBoss by Red Hat.
*
* 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.jboss.as.domain.controller.transformers;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD_CONTENT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ARCHIVE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.BROWSE_CONTENT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.EXPLODE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.READ_ATTRIBUTE_OPERATION;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.READ_CONTENT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REMOVE_CONTENT;
import static org.jboss.as.server.controller.resources.DeploymentAttributes.isUnmanagedContent;
import java.util.Map;
import org.jboss.as.controller.ModelVersion;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.logging.ControllerLogger;
import org.jboss.as.controller.transform.TransformationContext;
import org.jboss.as.controller.transform.description.AttributeConverter;
import org.jboss.as.controller.transform.description.ChainedTransformationDescriptionBuilder;
import org.jboss.as.controller.transform.description.DiscardAttributeChecker;
import org.jboss.as.controller.transform.description.RejectAttributeChecker;
import org.jboss.as.controller.transform.description.ResourceTransformationDescriptionBuilder;
import org.jboss.as.controller.transform.description.TransformationDescriptionBuilder;
import org.jboss.as.server.controller.resources.DeploymentAttributes;
import org.jboss.as.server.controller.resources.DeploymentResourceDefinition;
import org.jboss.dmr.ModelNode;
/**
* Transformers for deployments in domain mode.
* @author Emmanuel Hugonnet (c) 2016 Red Hat, inc.
*/
class DeploymentTransformers {
public static ChainedTransformationDescriptionBuilder buildTransformerChain(ModelVersion currentVersion) {
ChainedTransformationDescriptionBuilder chainedBuilder =
TransformationDescriptionBuilder.Factory.createChainedInstance(DeploymentResourceDefinition.PATH, currentVersion);
ResourceTransformationDescriptionBuilder builder = chainedBuilder.createBuilder(currentVersion, DomainTransformers.VERSION_4_1);
builder
.getAttributeBuilder().addRejectCheck(EXPLODED_REJECT, DeploymentAttributes.CONTENT_ALL)
.setValueConverter(ARCHIVE_REMOVER, DeploymentAttributes.CONTENT_ALL)
.end()
.addOperationTransformationOverride(READ_ATTRIBUTE_OPERATION)
.setDiscard(DiscardAttributeChecker.ALWAYS, DeploymentAttributes.MANAGED)
.end()
.addOperationTransformationOverride(ADD)
.addRejectCheck(EXPLODED_REJECT, DeploymentAttributes.CONTENT_ALL)
.setValueConverter(ARCHIVE_REMOVER, DeploymentAttributes.CONTENT_ALL)
.end()
.discardOperations(BROWSE_CONTENT, READ_CONTENT, EXPLODE, ADD_CONTENT, REMOVE_CONTENT);
return chainedBuilder;
}
private static final RejectAttributeChecker EXPLODED_REJECT = new RejectAttributeChecker.ListRejectAttributeChecker(new RejectAttributeChecker.DefaultRejectAttributeChecker() {
@Override
protected boolean rejectAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context) {
if (!isUnmanagedContent(attributeValue)) {
return attributeValue.hasDefined(ARCHIVE) && !attributeValue.get(ARCHIVE).asBoolean(true);
}
return false;
}
@Override
public String getRejectionLogMessage(Map<String, ModelNode> attributes) {
return ControllerLogger.ROOT_LOGGER.explodedDeploymentNotSupported();
}
});
private static final AttributeConverter ARCHIVE_REMOVER = new AttributeConverter.DefaultAttributeConverter() {
@Override
protected void convertAttribute(PathAddress address, String attributeName, ModelNode attributeValue, TransformationContext context) {
if (attributeValue.isDefined()) {
for (ModelNode content : attributeValue.asList()) {
if (!isUnmanagedContent(content)) {
if (content.hasDefined(ARCHIVE) && content.get(ARCHIVE).asBoolean(true)) {
content.remove(ARCHIVE);
}
}
}
}
}
};
}