/* * JBoss, Home of Professional Open Source. * Copyright 2014, Red Hat, Inc., and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.as.messaging; import static org.jboss.as.controller.SimpleAttributeDefinitionBuilder.create; import static org.jboss.as.messaging.CommonAttributes.BINDINGS_DIRECTORY; import static org.jboss.as.messaging.CommonAttributes.JOURNAL_DIRECTORY; import static org.jboss.as.messaging.CommonAttributes.LARGE_MESSAGES_DIRECTORY; import static org.jboss.as.messaging.CommonAttributes.PAGING_DIRECTORY; import java.util.HashMap; import java.util.Map; import org.jboss.as.controller.AttributeDefinition; import org.jboss.as.controller.ModelOnlyResourceDefinition; import org.jboss.as.controller.PathElement; import org.jboss.as.controller.SimpleAttributeDefinition; import org.jboss.as.controller.descriptions.ModelDescriptionConstants; import org.jboss.as.controller.services.path.PathResourceDefinition; import org.jboss.as.server.ServerEnvironment; import org.jboss.dmr.ModelNode; /** * @author <a href="http://jmesnil.net/">Jeff Mesnil</a> (c) 2014 Red Hat inc. */ public class PathDefinition extends ModelOnlyResourceDefinition { static final String DEFAULT_RELATIVE_TO = ServerEnvironment.SERVER_DATA_DIR; // base attribute for the 4 messaging path subresources. // each one define a different default values. Their respective attributes are accessed through the PATHS map. private static final SimpleAttributeDefinition PATH_BASE = create(PathResourceDefinition.PATH) .setAllowExpression(true) .setRequired(false) .setRestartAllServices() .build(); public static final SimpleAttributeDefinition RELATIVE_TO = create(PathResourceDefinition.RELATIVE_TO) .setDefaultValue(new ModelNode(DEFAULT_RELATIVE_TO)) .setRequired(false) .setRestartAllServices() .build(); public static final Map<String, SimpleAttributeDefinition> PATHS = new HashMap<String, SimpleAttributeDefinition>(); private static final String DEFAULT_PATH = "messaging"; // all default paths dir are prepended with messaging // I am not sure this was not a typo and that they should have been put inside a messaging/ dir instead (as it // was stated in LocalDescriptions.properties) // For compatibility sake, we keep the messaging prefix. static final String DEFAULT_BINDINGS_DIR = DEFAULT_PATH + "bindings"; static final String DEFAULT_JOURNAL_DIR = DEFAULT_PATH + "journal"; static final String DEFAULT_LARGE_MESSAGE_DIR = DEFAULT_PATH + "largemessages"; static final String DEFAULT_PAGING_DIR = DEFAULT_PATH + "paging"; static { PATHS.put(BINDINGS_DIRECTORY, create(PATH_BASE).setDefaultValue(new ModelNode(DEFAULT_BINDINGS_DIR)).build()); PATHS.put(JOURNAL_DIRECTORY, create(PATH_BASE).setDefaultValue(new ModelNode(DEFAULT_JOURNAL_DIR)).build()); PATHS.put(LARGE_MESSAGES_DIRECTORY, create(PATH_BASE).setDefaultValue(new ModelNode(DEFAULT_LARGE_MESSAGE_DIR)).build()); PATHS.put(PAGING_DIRECTORY, create(PATH_BASE).setDefaultValue(new ModelNode(DEFAULT_PAGING_DIR)).build()); } static final AttributeDefinition[] getAttributes(final String path) { return new AttributeDefinition[] { PATHS.get(path), RELATIVE_TO }; } public PathDefinition(PathElement path) { super(path, MessagingExtension.getResourceDescriptionResolver(ModelDescriptionConstants.PATH), getAttributes(path.getValue())); } // TODO add @Override once the WFCORE version with this method is integrated public int getMinOccurs() { return 1; } }