forked from wildfly/wildfly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ContentDefinition.java
131 lines (109 loc) · 6.87 KB
/
ContentDefinition.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package org.jboss.as.server.deploymentoverlay;
import java.util.Locale;
import java.util.ResourceBundle;
import org.jboss.as.controller.AttributeDefinition;
import org.jboss.as.controller.AttributeMarshaller;
import org.jboss.as.controller.ParameterCorrector;
import org.jboss.as.controller.SimpleAttributeDefinition;
import org.jboss.as.controller.SimpleAttributeDefinitionBuilder;
import org.jboss.as.controller.SimpleResourceDefinition;
import org.jboss.as.controller.client.helpers.MeasurementUnit;
import org.jboss.as.controller.descriptions.ModelDescriptionConstants;
import org.jboss.as.controller.descriptions.ResourceDescriptionResolver;
import org.jboss.as.controller.descriptions.common.CommonDescriptions;
import org.jboss.as.controller.operations.validation.ParameterValidator;
import org.jboss.as.controller.registry.AttributeAccess;
import org.jboss.as.controller.registry.ManagementResourceRegistration;
import org.jboss.as.repository.ContentRepository;
import org.jboss.as.repository.DeploymentFileRepository;
import org.jboss.dmr.ModelNode;
import org.jboss.dmr.ModelType;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ARCHIVE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ATTRIBUTES;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.BYTES;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.CONTENT;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.DESCRIPTION;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.EXPRESSIONS_ALLOWED;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.HASH;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.INPUT_STREAM_INDEX;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.MAX_LENGTH;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.MIN;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.MIN_LENGTH;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.NILLABLE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PATH;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.RELATIVE_TO;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REQUIRED;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.TYPE;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.URL;
import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.VALUE_TYPE;
/**
* @author Stuart Douglas
*/
public class ContentDefinition extends SimpleResourceDefinition {
static final ContentAttributeDefinition CONTENT =
new ContentAttributeDefinition(ModelDescriptionConstants.CONTENT, ModelType.OBJECT, false);
private static final AttributeDefinition[] ATTRIBUTES = {CONTENT};
public static AttributeDefinition[] attributes() {
return ATTRIBUTES.clone();
}
public ContentDefinition(final ContentRepository contentRepository, final DeploymentFileRepository remoteRepository) {
super(DeploymentOverlayModel.CONTENT_PATH,
CommonDescriptions.getResourceDescriptionResolver(ModelDescriptionConstants.DEPLOYMENT_OVERLAY + "." + ModelDescriptionConstants.CONTENT, false),
new ContentAdd(contentRepository, remoteRepository),
ContentRemove.INSTANCE);
}
@Override
public void registerAttributes(final ManagementResourceRegistration resourceRegistration) {
for (AttributeDefinition attr : ATTRIBUTES) {
resourceRegistration.registerReadOnlyAttribute(attr, null);
}
}
public static final class ContentAttributeDefinition extends SimpleAttributeDefinition {
private ContentAttributeDefinition(final String name, final ModelType type, final boolean allowNull) {
super(name, type, allowNull);
}
@Override
public ModelNode addOperationParameterDescription(ModelNode resourceDescription, String operationName,
ResourceDescriptionResolver resolver, Locale locale, ResourceBundle bundle) {
final ModelNode result = super.addOperationParameterDescription(resourceDescription, operationName, resolver, locale, bundle);
addOperationParameterValueTypeDescription(result, operationName, resolver, locale, bundle);
return result;
}
private void addOperationParameterValueTypeDescription(ModelNode result, String operationName, ResourceDescriptionResolver resolver, Locale locale, ResourceBundle bundle) {
final ModelNode valueType = getNoTextValueTypeDescription(result);
valueType.get(INPUT_STREAM_INDEX, DESCRIPTION).set(resolver.getOperationParameterValueTypeDescription(operationName, getName(), locale, bundle, INPUT_STREAM_INDEX));
valueType.get(HASH, DESCRIPTION).set(resolver.getOperationParameterValueTypeDescription(operationName, getName(), locale, bundle, HASH));
valueType.get(BYTES, DESCRIPTION).set(resolver.getOperationParameterValueTypeDescription(operationName, getName(), locale, bundle, BYTES));
valueType.get(URL, DESCRIPTION).set(resolver.getOperationParameterValueTypeDescription(operationName, getName(), locale, bundle, URL));
}
private ModelNode getNoTextValueTypeDescription(final ModelNode parent) {
final ModelNode valueType = parent.get(VALUE_TYPE);
final ModelNode inputStreamIndex = valueType.get(INPUT_STREAM_INDEX);
inputStreamIndex.get(TYPE).set(ModelType.INT);
inputStreamIndex.get(INPUT_STREAM_INDEX, DESCRIPTION);
inputStreamIndex.get(INPUT_STREAM_INDEX, REQUIRED).set(false);
inputStreamIndex.get(INPUT_STREAM_INDEX, MIN).set(0);
inputStreamIndex.get(INPUT_STREAM_INDEX, NILLABLE).set(true);
final ModelNode hash = valueType.get(HASH);
hash.get(TYPE).set(ModelType.BYTES);
hash.get(HASH, DESCRIPTION);
hash.get(HASH, REQUIRED).set(false);
hash.get(HASH, MIN_LENGTH).set(20);
hash.get(HASH, MAX_LENGTH).set(20);
hash.get(HASH, NILLABLE).set(true);
final ModelNode bytes = valueType.get(BYTES);
bytes.get(TYPE).set(ModelType.BYTES);
bytes.get(BYTES, DESCRIPTION);
bytes.get(BYTES, REQUIRED).set(false);
bytes.get(BYTES, MIN_LENGTH).set(1);
bytes.get(BYTES, NILLABLE).set(true);
final ModelNode url = valueType.get(URL);
url.get(TYPE).set(ModelType.STRING);
url.get(DESCRIPTION);
url.get(REQUIRED).set(false);
url.get(MIN_LENGTH).set(1);
url.get(NILLABLE).set(true);
return valueType;
}
}
}