Committed by
Gerrit Code Review
Adding OnosCfgMojo to the onos maven plugin.
Removing previously manuall generated files since they are now auto-generated. Change-Id: I1f8361f97db74c9e2f077b3d5e7a6e65876561ef
Showing
17 changed files
with
325 additions
and
70 deletions
1 | -# Temporary: to be auto-generated in near future | ||
2 | -packetOutOnly|BOOLEAN|false|Enable packet-out only forwarding; default is false | ||
3 | -packetOutOfppTable|BOOLEAN|false|Enable first packet forwarding using OFPP_TABLE port instead of PacketOut with actual port; default is false | ||
4 | -flowTimeout|INTEGER|10|Configure Flow Timeout for installed flow rules; default is 10 sec | ||
5 | -flowPriority|INTEGER|10|Configure Flow Priority for installed flow rules; default is 10 | ||
6 | -ipv6Forwarding|BOOLEAN|false|Enable IPv6 forwarding; default is false | ||
7 | -matchDstMacOnly|BOOLEAN|false|Enable matching Dst Mac Only; default is false | ||
8 | -matchVlanId|BOOLEAN|false|Enable matching Vlan ID; default is false | ||
9 | -matchIpv4Address|BOOLEAN|false|Enable matching IPv4 Addresses; default is false | ||
10 | -matchIpv4Dscp|BOOLEAN|false|Enable matching IPv4 DSCP and ECN; default is false | ||
11 | -matchIpv6Address|BOOLEAN|false|Enable matching IPv6 Addresses; default is false | ||
12 | -matchIpv6FlowLabel|BOOLEAN|false|Enable matching IPv6 FlowLabel; default is false | ||
13 | -matchTcpUdpPorts|BOOLEAN|false|Enable matching TCP/UDP ports; default is false | ||
14 | -matchIcmpFields|BOOLEAN|false|Enable matching ICMPv4 and ICMPv6 fields; default is false |
... | @@ -85,6 +85,11 @@ | ... | @@ -85,6 +85,11 @@ |
85 | <groupId>org.apache.felix</groupId> | 85 | <groupId>org.apache.felix</groupId> |
86 | <artifactId>maven-scr-plugin</artifactId> | 86 | <artifactId>maven-scr-plugin</artifactId> |
87 | </plugin> | 87 | </plugin> |
88 | + | ||
89 | + <plugin> | ||
90 | + <groupId>org.onosproject</groupId> | ||
91 | + <artifactId>onos-maven-plugin</artifactId> | ||
92 | + </plugin> | ||
88 | </plugins> | 93 | </plugins> |
89 | </build> | 94 | </build> |
90 | 95 | ... | ... |
... | @@ -64,6 +64,11 @@ | ... | @@ -64,6 +64,11 @@ |
64 | <groupId>org.apache.felix</groupId> | 64 | <groupId>org.apache.felix</groupId> |
65 | <artifactId>maven-bundle-plugin</artifactId> | 65 | <artifactId>maven-bundle-plugin</artifactId> |
66 | </plugin> | 66 | </plugin> |
67 | + | ||
68 | + <plugin> | ||
69 | + <groupId>org.onosproject</groupId> | ||
70 | + <artifactId>onos-maven-plugin</artifactId> | ||
71 | + </plugin> | ||
67 | </plugins> | 72 | </plugins> |
68 | </build> | 73 | </build> |
69 | 74 | ... | ... |
... | @@ -47,6 +47,7 @@ | ... | @@ -47,6 +47,7 @@ |
47 | <description>Open Network Operating System root project</description> | 47 | <description>Open Network Operating System root project</description> |
48 | 48 | ||
49 | <modules> | 49 | <modules> |
50 | + <module>tools/package/maven-plugin</module> | ||
50 | <module>utils</module> | 51 | <module>utils</module> |
51 | <module>core</module> | 52 | <module>core</module> |
52 | <module>web</module> | 53 | <module>web</module> |
... | @@ -539,38 +540,19 @@ | ... | @@ -539,38 +540,19 @@ |
539 | </configuration> | 540 | </configuration> |
540 | </plugin> | 541 | </plugin> |
541 | 542 | ||
542 | - <!-- TODO: add findbugs plugin for static code analysis; for explicit invocation only --> | ||
543 | - <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.--> | ||
544 | - <!-- | ||
545 | <plugin> | 543 | <plugin> |
546 | - <groupId>org.eclipse.m2e</groupId> | 544 | + <groupId>org.onosproject</groupId> |
547 | - <artifactId>lifecycle-mapping</artifactId> | 545 | + <artifactId>onos-maven-plugin</artifactId> |
548 | - <version>1.0.0</version> | 546 | + <version>${project.version}</version> |
549 | - <configuration> | 547 | + <executions> |
550 | - <lifecycleMappingMetadata> | 548 | + <execution> |
551 | - <pluginExecutions> | 549 | + <phase>generate-resources</phase> |
552 | - <pluginExecution> | 550 | + <goals> |
553 | - <pluginExecutionFilter> | 551 | + <goal>cfg</goal> |
554 | - <groupId>org.jacoco</groupId> | 552 | + </goals> |
555 | - <artifactId> | 553 | + </execution> |
556 | - jacoco-maven-plugin | 554 | + </executions> |
557 | - </artifactId> | ||
558 | - <versionRange> | ||
559 | - [0.7.1.201405082137,) | ||
560 | - </versionRange> | ||
561 | - <goals> | ||
562 | - <goal>prepare-agent</goal> | ||
563 | - </goals> | ||
564 | - </pluginExecutionFilter> | ||
565 | - <action> | ||
566 | - <ignore></ignore> | ||
567 | - </action> | ||
568 | - </pluginExecution> | ||
569 | - </pluginExecutions> | ||
570 | - </lifecycleMappingMetadata> | ||
571 | - </configuration> | ||
572 | </plugin> | 555 | </plugin> |
573 | - --> | ||
574 | </plugins> | 556 | </plugins> |
575 | </pluginManagement> | 557 | </pluginManagement> |
576 | 558 | ... | ... |
providers/null/device/src/main/java/org/onosproject/provider/nil/device/impl/NullDeviceProvider.java
... | @@ -25,6 +25,7 @@ import org.apache.felix.scr.annotations.Property; | ... | @@ -25,6 +25,7 @@ import org.apache.felix.scr.annotations.Property; |
25 | import org.apache.felix.scr.annotations.Reference; | 25 | import org.apache.felix.scr.annotations.Reference; |
26 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 26 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
27 | import org.onlab.packet.ChassisId; | 27 | import org.onlab.packet.ChassisId; |
28 | +import org.onosproject.cfg.ComponentConfigService; | ||
28 | import org.onosproject.cluster.ClusterService; | 29 | import org.onosproject.cluster.ClusterService; |
29 | import org.onosproject.cluster.NodeId; | 30 | import org.onosproject.cluster.NodeId; |
30 | import org.onosproject.net.Device; | 31 | import org.onosproject.net.Device; |
... | @@ -73,6 +74,9 @@ public class NullDeviceProvider extends AbstractProvider implements DeviceProvid | ... | @@ -73,6 +74,9 @@ public class NullDeviceProvider extends AbstractProvider implements DeviceProvid |
73 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 74 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
74 | protected DeviceProviderRegistry providerRegistry; | 75 | protected DeviceProviderRegistry providerRegistry; |
75 | 76 | ||
77 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
78 | + protected ComponentConfigService cfgService; | ||
79 | + | ||
76 | private DeviceProviderService providerService; | 80 | private DeviceProviderService providerService; |
77 | 81 | ||
78 | private ExecutorService deviceBuilder = | 82 | private ExecutorService deviceBuilder = |
... | @@ -88,11 +92,11 @@ public class NullDeviceProvider extends AbstractProvider implements DeviceProvid | ... | @@ -88,11 +92,11 @@ public class NullDeviceProvider extends AbstractProvider implements DeviceProvid |
88 | private final Map<Integer, DeviceDescription> descriptions = Maps.newHashMap(); | 92 | private final Map<Integer, DeviceDescription> descriptions = Maps.newHashMap(); |
89 | 93 | ||
90 | @Property(name = "devConfigs", value = "", label = "Instance-specific configurations") | 94 | @Property(name = "devConfigs", value = "", label = "Instance-specific configurations") |
91 | - private String devConfigs = ""; | 95 | + private String devConfigs = null; |
92 | 96 | ||
93 | private int numDevices = DEF_NUMDEVICES; | 97 | private int numDevices = DEF_NUMDEVICES; |
94 | 98 | ||
95 | - @Property(name = "numPorts", value = "10", label = "Number of ports per devices") | 99 | + @Property(name = "numPorts", intValue = 10, label = "Number of ports per devices") |
96 | private int numPorts = DEF_NUMPORTS; | 100 | private int numPorts = DEF_NUMPORTS; |
97 | 101 | ||
98 | private DeviceCreator creator; | 102 | private DeviceCreator creator; |
... | @@ -108,6 +112,7 @@ public class NullDeviceProvider extends AbstractProvider implements DeviceProvid | ... | @@ -108,6 +112,7 @@ public class NullDeviceProvider extends AbstractProvider implements DeviceProvid |
108 | 112 | ||
109 | @Activate | 113 | @Activate |
110 | public void activate(ComponentContext context) { | 114 | public void activate(ComponentContext context) { |
115 | + cfgService.registerProperties(getClass()); | ||
111 | providerService = providerRegistry.register(this); | 116 | providerService = providerRegistry.register(this); |
112 | if (!modified(context)) { | 117 | if (!modified(context)) { |
113 | deviceBuilder.submit(new DeviceCreator(true)); | 118 | deviceBuilder.submit(new DeviceCreator(true)); |
... | @@ -118,6 +123,7 @@ public class NullDeviceProvider extends AbstractProvider implements DeviceProvid | ... | @@ -118,6 +123,7 @@ public class NullDeviceProvider extends AbstractProvider implements DeviceProvid |
118 | 123 | ||
119 | @Deactivate | 124 | @Deactivate |
120 | public void deactivate(ComponentContext context) { | 125 | public void deactivate(ComponentContext context) { |
126 | + cfgService.unregisterProperties(getClass(), false); | ||
121 | deviceBuilder.submit(new DeviceCreator(false)); | 127 | deviceBuilder.submit(new DeviceCreator(false)); |
122 | try { | 128 | try { |
123 | deviceBuilder.awaitTermination(1000, TimeUnit.MILLISECONDS); | 129 | deviceBuilder.awaitTermination(1000, TimeUnit.MILLISECONDS); | ... | ... |
... | @@ -70,6 +70,11 @@ | ... | @@ -70,6 +70,11 @@ |
70 | <groupId>org.apache.felix</groupId> | 70 | <groupId>org.apache.felix</groupId> |
71 | <artifactId>maven-bundle-plugin</artifactId> | 71 | <artifactId>maven-bundle-plugin</artifactId> |
72 | </plugin> | 72 | </plugin> |
73 | + | ||
74 | + <plugin> | ||
75 | + <groupId>org.onosproject</groupId> | ||
76 | + <artifactId>onos-maven-plugin</artifactId> | ||
77 | + </plugin> | ||
73 | </plugins> | 78 | </plugins> |
74 | </build> | 79 | </build> |
75 | 80 | ... | ... |
tools/package/maven-plugin/pom.xml
0 → 100644
1 | +<!-- | ||
2 | + ~ Copyright 2015 Open Networking Laboratory | ||
3 | + ~ | ||
4 | + ~ Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + ~ you may not use this file except in compliance with the License. | ||
6 | + ~ You may obtain a copy of the License at | ||
7 | + ~ | ||
8 | + ~ http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + ~ | ||
10 | + ~ Unless required by applicable law or agreed to in writing, software | ||
11 | + ~ distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + ~ See the License for the specific language governing permissions and | ||
14 | + ~ limitations under the License. | ||
15 | + --> | ||
16 | +<project> | ||
17 | + <modelVersion>4.0.0</modelVersion> | ||
18 | + | ||
19 | + <parent> | ||
20 | + <groupId>org.onosproject</groupId> | ||
21 | + <artifactId>onos-base</artifactId> | ||
22 | + <version>1</version> | ||
23 | + <relativePath>../../build/pom.xml</relativePath> | ||
24 | + </parent> | ||
25 | + | ||
26 | + <artifactId>onos-maven-plugin</artifactId> | ||
27 | + <version>1.1.0-SNAPSHOT</version> | ||
28 | + <packaging>maven-plugin</packaging> | ||
29 | + | ||
30 | + <description>Maven plugin for packaging ONOS applications or generating component configuration resources</description> | ||
31 | + | ||
32 | + <dependencies> | ||
33 | + <dependency> | ||
34 | + <groupId>org.apache.maven</groupId> | ||
35 | + <artifactId>maven-plugin-api</artifactId> | ||
36 | + <version>2.0</version> | ||
37 | + </dependency> | ||
38 | + | ||
39 | + <dependency> | ||
40 | + <groupId>com.thoughtworks.qdox</groupId> | ||
41 | + <artifactId>qdox</artifactId> | ||
42 | + <version>2.0-M3</version> | ||
43 | + </dependency> | ||
44 | + | ||
45 | + <!-- dependencies to annotations --> | ||
46 | + <dependency> | ||
47 | + <groupId>org.apache.maven.plugin-tools</groupId> | ||
48 | + <artifactId>maven-plugin-annotations</artifactId> | ||
49 | + <version>3.4</version> | ||
50 | + <scope>provided</scope> | ||
51 | + </dependency> | ||
52 | + </dependencies> | ||
53 | + | ||
54 | + <build> | ||
55 | + <plugins> | ||
56 | + <plugin> | ||
57 | + <groupId>org.apache.maven.plugins</groupId> | ||
58 | + <artifactId>maven-compiler-plugin</artifactId> | ||
59 | + <version>2.5.1</version> | ||
60 | + <configuration> | ||
61 | + <source>1.8</source> | ||
62 | + <target>1.8</target> | ||
63 | + </configuration> | ||
64 | + </plugin> | ||
65 | + | ||
66 | + <plugin> | ||
67 | + <groupId>org.apache.maven.plugins</groupId> | ||
68 | + <artifactId>maven-plugin-plugin</artifactId> | ||
69 | + <version>3.4</version> | ||
70 | + <executions> | ||
71 | + <execution> | ||
72 | + <id>default-descriptor</id> | ||
73 | + <phase>process-classes</phase> | ||
74 | + </execution> | ||
75 | + <!-- if you want to generate help goal --> | ||
76 | + <execution> | ||
77 | + <id>help-goal</id> | ||
78 | + <goals> | ||
79 | + <goal>helpmojo</goal> | ||
80 | + </goals> | ||
81 | + </execution> | ||
82 | + </executions> | ||
83 | + </plugin> | ||
84 | + </plugins> | ||
85 | + </build> | ||
86 | +</project> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.maven; | ||
17 | + | ||
18 | +import org.apache.maven.plugin.AbstractMojo; | ||
19 | +import org.apache.maven.plugin.MojoExecutionException; | ||
20 | +import org.apache.maven.plugins.annotations.LifecyclePhase; | ||
21 | +import org.apache.maven.plugins.annotations.Mojo; | ||
22 | +import org.apache.maven.plugins.annotations.Parameter; | ||
23 | + | ||
24 | +import java.util.List; | ||
25 | + | ||
26 | +/** | ||
27 | + * Produces ONOS application archive. | ||
28 | + */ | ||
29 | +@Mojo(name = "app", defaultPhase = LifecyclePhase.PACKAGE) | ||
30 | +public class OnosAppMojo extends AbstractMojo { | ||
31 | + | ||
32 | + @Parameter | ||
33 | + private String name; | ||
34 | + | ||
35 | + @Parameter | ||
36 | + private String version; | ||
37 | + | ||
38 | + @Parameter | ||
39 | + private String origin; | ||
40 | + | ||
41 | + @Parameter | ||
42 | + private String description; | ||
43 | + | ||
44 | + @Parameter | ||
45 | + private String featuresRepo; | ||
46 | + | ||
47 | + @Parameter | ||
48 | + private String features; | ||
49 | + | ||
50 | + @Parameter | ||
51 | + private String permissions; | ||
52 | + | ||
53 | + @Parameter | ||
54 | + private List<String> artifacts; | ||
55 | + | ||
56 | + | ||
57 | + public void execute() throws MojoExecutionException { | ||
58 | + getLog().info("Building ONOS application archive " + name + " version " + version); | ||
59 | + | ||
60 | + } | ||
61 | +} | ||
62 | + | ||
63 | + |
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | +package org.onosproject.maven; | ||
17 | + | ||
18 | +import com.thoughtworks.qdox.JavaProjectBuilder; | ||
19 | +import com.thoughtworks.qdox.model.JavaAnnotation; | ||
20 | +import com.thoughtworks.qdox.model.JavaClass; | ||
21 | +import com.thoughtworks.qdox.model.JavaField; | ||
22 | +import org.apache.maven.plugin.AbstractMojo; | ||
23 | +import org.apache.maven.plugin.MojoExecutionException; | ||
24 | +import org.apache.maven.plugins.annotations.LifecyclePhase; | ||
25 | +import org.apache.maven.plugins.annotations.Mojo; | ||
26 | +import org.apache.maven.plugins.annotations.Parameter; | ||
27 | + | ||
28 | +import java.io.File; | ||
29 | +import java.io.FileWriter; | ||
30 | +import java.io.IOException; | ||
31 | +import java.io.PrintWriter; | ||
32 | +import java.util.ArrayList; | ||
33 | +import java.util.List; | ||
34 | + | ||
35 | +/** | ||
36 | + * Produces ONOS component configuration catalogue resources. | ||
37 | + */ | ||
38 | +@Mojo(name = "cfg", defaultPhase = LifecyclePhase.GENERATE_RESOURCES) | ||
39 | +public class OnosCfgMojo extends AbstractMojo { | ||
40 | + | ||
41 | + private static final String COMPONENT = "org.apache.felix.scr.annotations.Component"; | ||
42 | + private static final String PROPERTY = "org.apache.felix.scr.annotations.Property"; | ||
43 | + private static final String SEP = "|"; | ||
44 | + | ||
45 | + /** | ||
46 | + * The directory where the generated catalogue file will be put. | ||
47 | + */ | ||
48 | + @Parameter( defaultValue = "${basedir}" ) | ||
49 | + protected File srcDirectory; | ||
50 | + | ||
51 | + /** | ||
52 | + * The directory where the generated catalogue file will be put. | ||
53 | + */ | ||
54 | + @Parameter( defaultValue = "${project.build.outputDirectory}" ) | ||
55 | + protected File dstDirectory; | ||
56 | + | ||
57 | + @Override | ||
58 | + public void execute() throws MojoExecutionException { | ||
59 | + getLog().info("Generating ONOS component configuration catalogues..."); | ||
60 | + try { | ||
61 | + JavaProjectBuilder builder = new JavaProjectBuilder(); | ||
62 | + builder.addSourceTree(new File(srcDirectory, "src/main/java")); | ||
63 | + builder.getClasses().forEach(this::processClass); | ||
64 | + } catch (Exception e) { | ||
65 | + e.printStackTrace(); | ||
66 | + throw e; | ||
67 | + } | ||
68 | + } | ||
69 | + | ||
70 | + private void processClass(JavaClass javaClass) { | ||
71 | + boolean isComponent = javaClass.getAnnotations().stream() | ||
72 | + .map(ja -> ja.getType().getName().equals(COMPONENT)) | ||
73 | + .findFirst().isPresent(); | ||
74 | + if (isComponent) { | ||
75 | + List<String> lines = new ArrayList<>(); | ||
76 | + javaClass.getFields().forEach(field -> processField(lines, javaClass, field)); | ||
77 | + if (!lines.isEmpty()) { | ||
78 | + writeCatalog(javaClass, lines); | ||
79 | + } | ||
80 | + } | ||
81 | + } | ||
82 | + | ||
83 | + private void writeCatalog(JavaClass javaClass, List<String> lines) { | ||
84 | + File dir = new File(dstDirectory, javaClass.getPackageName().replace('.', '/')); | ||
85 | + dir.mkdirs(); | ||
86 | + | ||
87 | + File cfgDef = new File(dir, javaClass.getName().replace('.', '/') + ".cfgdef"); | ||
88 | + try (FileWriter fw = new FileWriter(cfgDef); | ||
89 | + PrintWriter pw = new PrintWriter(fw)) { | ||
90 | + pw.println("# This file is auto-generated by onos-maven-plugin"); | ||
91 | + lines.forEach(pw::println); | ||
92 | + } catch (IOException e) { | ||
93 | + System.err.println("Unable to write catalog for " + javaClass.getName()); | ||
94 | + e.printStackTrace(); | ||
95 | + } | ||
96 | + } | ||
97 | + | ||
98 | + private void processField(List<String> lines, JavaClass javaClass, JavaField field) { | ||
99 | + field.getAnnotations().forEach(ja -> { | ||
100 | + if (ja.getType().getName().equals(PROPERTY)) { | ||
101 | + lines.add(expand(javaClass, ja.getNamedParameter("name").toString()) + | ||
102 | + SEP + type(field) + | ||
103 | + SEP + defaultValue(javaClass, field, ja) + | ||
104 | + SEP + description(ja)); | ||
105 | + } | ||
106 | + }); | ||
107 | + } | ||
108 | + | ||
109 | + // TODO: Stuff below is very much hack-ish and should be redone; it works for now though. | ||
110 | + | ||
111 | + private String description(JavaAnnotation annotation) { | ||
112 | + String description = (String) annotation.getNamedParameter("label"); | ||
113 | + return description.replaceAll("\" \\+ \"", "") | ||
114 | + .replaceFirst("^[^\"]*\"", "").replaceFirst("\"$", ""); | ||
115 | + } | ||
116 | + | ||
117 | + private String type(JavaField field) { | ||
118 | + String ft = field.getType().getName().toUpperCase(); | ||
119 | + return ft.equals("INT") ? "INTEGER" : ft; | ||
120 | + } | ||
121 | + | ||
122 | + private String defaultValue(JavaClass javaClass, JavaField field, | ||
123 | + JavaAnnotation annotation) { | ||
124 | + String ft = field.getType().getName().toLowerCase(); | ||
125 | + String defValueName = ft.equals("boolean") ? "boolValue" : | ||
126 | + ft.equals("string") ? "value" : ft + "Value"; | ||
127 | + Object dv = annotation.getNamedParameter(defValueName); | ||
128 | + return dv == null ? "" : expand(javaClass, dv.toString()); | ||
129 | + } | ||
130 | + | ||
131 | + private String stripQuotes(String string) { | ||
132 | + return string.trim().replaceFirst("^[^\"]*\"", "").replaceFirst("\"$", ""); | ||
133 | + } | ||
134 | + | ||
135 | + private String expand(JavaClass javaClass, String value) { | ||
136 | + JavaField field = javaClass.getFieldByName(value); | ||
137 | + return field == null ? stripQuotes(value) : | ||
138 | + stripQuotes(field.getCodeBlock().replaceFirst(".*=", "").replaceFirst(";$", "")); | ||
139 | + } | ||
140 | + | ||
141 | +} |
-
Please register or login to post a comment