package org.jboss.as.undertow;
import static org.jboss.as.controller.parsing.ParseUtils.unexpectedElement;
import java.util.List;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.PathAddress;
import org.jboss.as.controller.PersistentResourceDefinition;
import org.jboss.as.controller.ReloadRequiredRemoveStepHandler;
import org.jboss.as.controller.ReloadRequiredWriteAttributeHandler;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.SimplePersistentResourceDefinition;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import org.jboss.staxmapper.XMLExtendedStreamReader;
import org.jboss.staxmapper.XMLExtendedStreamWriter;
/**
* @author <a href="mailto:tomaz.cerar@redhat.com">Tomaz Cerar</a> (c) 2013 Red Hat Inc.
*/
public class ServerDefinition extends SimplePersistentResourceDefinition {
static final ServerDefinition INSTANCE = new ServerDefinition();
static final SimpleAttributeDefinition DEFAULT_HOST = new SimpleAttributeDefinitionBuilder(Constants.DEFAULT_HOST, ModelType.STRING)
.setAllowNull(true)
.setAllowExpression(true)
.build();
static final SimpleAttributeDefinition SERVLET_CONTAINER = new SimpleAttributeDefinitionBuilder(Constants.SERVLET_CONTAINER, ModelType.STRING)
.setAllowNull(true)
.setDefaultValue(new ModelNode("default"))
.build();
static final SimpleAttributeDefinition[] ATTRIBUTES = {DEFAULT_HOST, SERVLET_CONTAINER};
static final PersistentResourceDefinition[] CHILDREN = {AJPListenerResourceDefinition.INSTANCE,HttpListenerResourceDefinition.INSTANCE,HttpsListenerResourceDefinition.INSTANCE, HostDefinition.INSTANCE};
public ServerDefinition() {
super(UndertowExtension.SERVER_PATH, UndertowExtension.getResolver(Constants.SERVER), new ServerAdd(), ReloadRequiredRemoveStepHandler.INSTANCE);
}
@Override
public AttributeDefinition[] getAttributes() {
return ATTRIBUTES;
}
@Override
public PersistentResourceDefinition[] getChildren() {
return CHILDREN;
}
@Override
public void registerAttributes(ManagementResourceRegistration resourceRegistration) {
super.registerAttributes(resourceRegistration);
for (AttributeDefinition attr : ATTRIBUTES) {
resourceRegistration.registerReadWriteAttribute(attr, null, new ReloadRequiredWriteAttributeHandler(attr));
}
}
@Override
public void registerChildren(ManagementResourceRegistration registration) {
super.registerChildren(registration);
for (Handler handler : HandlerFactory.getHandlers()) {
registration.registerSubModel(handler);
}
}
@Override
public void parseChildren(XMLExtendedStreamReader reader, PathAddress address, List<ModelNode> list) throws XMLStreamException {
while (reader.hasNext() && reader.nextTag() != XMLStreamConstants.END_ELEMENT) {
switch (reader.getLocalName()) {
case Constants.HTTP_LISTENER: {
HttpListenerResourceDefinition.INSTANCE.parse(reader, address, list);
break;
}
case Constants.HTTPS_LISTENER: {
HttpsListenerResourceDefinition.INSTANCE.parse(reader, address, list);
break;
}
case Constants.AJP_LISTENER: {
AJPListenerResourceDefinition.INSTANCE.parse(reader, address, list);
break;
}
case Constants.HANDLERS: {
HandlerFactory.parseHandlers(reader, address, list);
break;
}
case Constants.HOST: {
HostDefinition.INSTANCE.parse(reader, address, list);
break;
}
default: {
throw unexpectedElement(reader);
}
}
}
}
@Override
public void persistChildren(XMLExtendedStreamWriter writer, ModelNode config) throws XMLStreamException {
HttpListenerResourceDefinition.INSTANCE.persist(writer, config);
HttpsListenerResourceDefinition.INSTANCE.persist(writer, config);
AJPListenerResourceDefinition.INSTANCE.persist(writer, config);
HandlerFactory.persistHandlers(writer, config, true);
HostDefinition.INSTANCE.persist(writer, config);
}
}