You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(6) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <sta...@us...> - 2008-04-16 21:15:51
|
Revision: 195 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=195&view=rev Author: stappend Date: 2008-04-16 14:15:48 -0700 (Wed, 16 Apr 2008) Log Message: ----------- Added SmiMib.findByOid() method to do an exact search for a particular SmiOidNode. Modified Paths: -------------- trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiMib.java trunk/jsmiparser-api/src/test/java/org/jsmiparser/IfMibTest.java trunk/jsmiparser-assembly/pom.xml Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiMib.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiMib.java 2007-12-27 13:40:17 UTC (rev 194) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiMib.java 2008-04-16 21:15:48 UTC (rev 195) @@ -203,6 +203,19 @@ return m_objectTypesMap; } + public SmiOidNode findByOid(int... oid) { + SmiOidNode child = null; + SmiOidNode parent = getRootNode(); + for (int oidPart : oid) { + child = parent.findChild(oidPart); + if (child == null) { + return null; + } + parent = child; + } + return child; + } + /** * This method can be used to find the best match for an OID. * By comparing the length of the OID of the result and the input OID you can @@ -211,7 +224,7 @@ * @param oid For which the best match is searched. * @return Best matching SmiOidValue, or null if none is found. */ - public SmiOidNode findByOidPrefix(int[] oid) { + public SmiOidNode findByOidPrefix(int... oid) { SmiOidNode parent = getRootNode(); for (int subId : oid) { SmiOidNode result = parent.findChild(subId); @@ -263,4 +276,5 @@ } return result; } + } Modified: trunk/jsmiparser-api/src/test/java/org/jsmiparser/IfMibTest.java =================================================================== --- trunk/jsmiparser-api/src/test/java/org/jsmiparser/IfMibTest.java 2007-12-27 13:40:17 UTC (rev 194) +++ trunk/jsmiparser-api/src/test/java/org/jsmiparser/IfMibTest.java 2008-04-16 21:15:48 UTC (rev 195) @@ -163,4 +163,21 @@ assertEquals(adminStatusOfInterface0x1101.length, result.getOid().length + 1); } + public void testFindByOid() { + SmiMib mib = getMib(); + + SmiVariable ifAdminStatus = mib.getVariables().find("ifAdminStatus"); + assertNotNull(ifAdminStatus); + assertEquals("1.3.6.1.2.1.2.2.1.7", ifAdminStatus.getOidStr()); + + SmiOidNode result = mib.findByOid(1, 3, 6, 1, 2, 1, 2, 2, 1, 7); + assertNotNull(result); + assertSame(ifAdminStatus.getNode(), result); + + result = mib.findByOid(1, 3); + assertNotNull(result); + assertEquals(1, result.getValues().size()); + assertEquals("org", result.getValues().get(0).getId()); + } + } Modified: trunk/jsmiparser-assembly/pom.xml =================================================================== --- trunk/jsmiparser-assembly/pom.xml 2007-12-27 13:40:17 UTC (rev 194) +++ trunk/jsmiparser-assembly/pom.xml 2008-04-16 21:15:48 UTC (rev 195) @@ -11,7 +11,7 @@ <parent> <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.6-SNAPSHOT</version> </parent> <scm> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2007-12-27 13:40:19
|
Revision: 194 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=194&view=rev Author: stappend Date: 2007-12-27 05:40:17 -0800 (Thu, 27 Dec 2007) Log Message: ----------- Support parsing old SMIv1 mibs using the standard SMIv2 definitions (eg: Counter becomes Counter32) Modified Paths: -------------- trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiConstants.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiImports.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiMib.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiModule.java trunk/jsmiparser-api/src/test/java/org/jsmiparser/phase/file/antlr/IFParseTest.java trunk/jsmiparser-api/src/test/java/org/jsmiparser/smi/SmiModuleTest.java trunk/jsmiparser-api/src/test/resources/org/jsmiparser/SpringTest.xml Added Paths: ----------- trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiOptions.java trunk/jsmiparser-api/src/test/java/org/jsmiparser/MixedV1V2Test.java Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java 2007-12-27 12:15:22 UTC (rev 193) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java 2007-12-27 13:40:17 UTC (rev 194) @@ -24,6 +24,7 @@ import org.jsmiparser.phase.xref.XRefProblemReporter; import org.jsmiparser.smi.SmiJavaCodeNamingStrategy; import org.jsmiparser.smi.SmiMib; +import org.jsmiparser.smi.SmiOptions; import org.jsmiparser.util.problem.DefaultProblemEventHandler; import org.jsmiparser.util.problem.DefaultProblemReporterFactory; import org.jsmiparser.util.problem.ProblemEventHandler; @@ -36,6 +37,7 @@ protected FileParserPhase m_fileParserPhase; protected XRefPhase m_xRefPhase; protected ErrorCheckPhase m_errorCheckPhase; + protected SmiOptions options = new SmiOptions(); public SmiDefaultParser() { this(new DefaultProblemEventHandler()); @@ -50,7 +52,7 @@ } public SmiMib parse() throws SmiException { - SmiMib mib = new SmiMib(new SmiJavaCodeNamingStrategy("org.jsmiparser.mib")); // TODO + SmiMib mib = new SmiMib(options, new SmiJavaCodeNamingStrategy("org.jsmiparser.mib")); // TODO Phase[] phases = new Phase[]{getFileParserPhase(), getXRefPhase(), getErrorCheckPhase()}; for (Phase phase : phases) { @@ -63,6 +65,14 @@ return mib; } + public SmiOptions getOptions() { + return options; + } + + public void setOptions(SmiOptions options) { + this.options = options; + } + protected FileParserPhase createFileParserPhase() { return new FileParserPhase(getProblemReporterFactory().create(FileParserProblemReporter.class)); } Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiConstants.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiConstants.java 2007-12-27 12:15:22 UTC (rev 193) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiConstants.java 2007-12-27 13:40:17 UTC (rev 194) @@ -27,7 +27,7 @@ public static final Set<String> SMI_DEFINITION_MODULE_NAMES = initSmiDefinitionModuleNames(); - public static final SmiMib JSMIPARSER_HARDCODED_MIB = new SmiMib(null); + public static final SmiMib JSMIPARSER_HARDCODED_MIB = new SmiMib(new SmiOptions(), null); public static final SmiModule JSMIPARSER_HARDCODED_MODULE = new SmiModule(JSMIPARSER_HARDCODED_MIB, new IdToken(null, "JSMIPARSER_HARDCODED_MIB")); public static final SmiType OBJECT_IDENTIFIER_TYPE = newType("OBJECT IDENTIFIER", SmiPrimitiveType.OBJECT_IDENTIFIER); Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiImports.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiImports.java 2007-12-27 12:15:22 UTC (rev 193) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiImports.java 2007-12-27 13:40:17 UTC (rev 194) @@ -15,28 +15,62 @@ */ package org.jsmiparser.smi; +import org.jsmiparser.phase.xref.XRefProblemReporter; import org.jsmiparser.util.location.Location; +import org.jsmiparser.util.pair.Pair; import org.jsmiparser.util.token.IdToken; -import org.jsmiparser.phase.xref.XRefProblemReporter; -import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; public class SmiImports { + // straight from libsmi, extended with macro definitions + static final String[] V1_V2_MAP = { + "RFC1155-SMI", "internet", "SNMPv2-SMI", "internet", + "RFC1155-SMI", "directory", "SNMPv2-SMI", "directory", + "RFC1155-SMI", "mgmt", "SNMPv2-SMI", "mgmt", + "RFC1155-SMI", "experimental", "SNMPv2-SMI", "experimental", + "RFC1155-SMI", "private", "SNMPv2-SMI", "private", + "RFC1155-SMI", "enterprises", "SNMPv2-SMI", "enterprises", + "RFC1155-SMI", "IpAddress", "SNMPv2-SMI", "IpAddress", + "RFC1155-SMI", "Counter", "SNMPv2-SMI", "Counter32", + "RFC1155-SMI", "Gauge", "SNMPv2-SMI", "Gauge32", + "RFC1155-SMI", "TimeTicks", "SNMPv2-SMI", "TimeTicks", + "RFC1155-SMI", "Opaque", "SNMPv2-SMI", "Opaque", + "RFC1065-SMI", "internet", "SNMPv2-SMI", "internet", + "RFC1065-SMI", "directory", "SNMPv2-SMI", "directory", + "RFC1065-SMI", "mgmt", "SNMPv2-SMI", "mgmt", + "RFC1065-SMI", "experimental", "SNMPv2-SMI", "experimental", + "RFC1065-SMI", "private", "SNMPv2-SMI", "private", + "RFC1065-SMI", "enterprises", "SNMPv2-SMI", "enterprises", + "RFC1065-SMI", "IpAddress", "SNMPv2-SMI", "IpAddress", + "RFC1065-SMI", "Counter", "SNMPv2-SMI", "Counter32", + "RFC1065-SMI", "Gauge", "SNMPv2-SMI", "Gauge32", + "RFC1065-SMI", "TimeTicks", "SNMPv2-SMI", "TimeTicks", + "RFC1065-SMI", "Opaque", "SNMPv2-SMI", "Opaque", + "RFC1213-MIB", "mib-2", "SNMPv2-SMI", "mib-2", + "RFC1213-MIB", "DisplayString", "SNMPv2-TC", "DisplayString", + + "RFC-1212", "OBJECT-TYPE", "SNMPv2-SMI", "OBJECT-TYPE" + // What to do with TRAP-TYPE? + }; + + private final SmiModule m_importerModule; private final IdToken m_moduleToken; private final List<IdToken> m_symbolTokens; private SmiModule m_module; - private List<SmiSymbol> m_symbols; + private LinkedHashMap<String, SmiSymbol> m_symbolMap = new LinkedHashMap<String, SmiSymbol>(); public SmiImports(SmiModule importerModule, IdToken moduleToken, List<IdToken> symbolTokens) { - assert(importerModule != null); - assert(moduleToken != null); - assert(symbolTokens != null); - + assert (importerModule != null); + assert (moduleToken != null); + assert (symbolTokens != null); + m_importerModule = importerModule; m_moduleToken = moduleToken; @@ -47,8 +81,8 @@ return m_module; } - public List<SmiSymbol> getSymbols() { - return m_symbols; + public Collection<SmiSymbol> getSymbols() { + return m_symbolMap.values(); } public IdToken getModuleToken() { @@ -64,27 +98,61 @@ } public SmiSymbol find(String id) { - for (SmiSymbol symbol : m_symbols) { - if (symbol.getId().equals(id)) { - return symbol; - } - } - return null; + return m_symbolMap.get(id); } public void resolveImports(XRefProblemReporter reporter) { - List<SmiSymbol> symbols = new ArrayList<SmiSymbol>(); - m_module = m_importerModule.getMib().resolveModule(m_moduleToken, reporter); + m_module = m_importerModule.getMib().findModule(m_moduleToken.getId()); if (m_module != null) { for (IdToken idToken : getSymbolTokens()) { SmiSymbol symbol = getModule().findSymbol(idToken.getId()); if (symbol != null) { - symbols.add(symbol); + m_symbolMap.put(idToken.getId(), symbol); } else { reporter.reportCannotFindImportedSymbol(idToken, m_moduleToken); } } + } else { + if (m_importerModule.getMib().getOptions().isConvertV1ImportsToV2()) { + resolveV1Imports(reporter); + } else { + reporter.reportCannotFindModule(m_moduleToken); + } } - m_symbols = Collections.unmodifiableList(symbols); } + + private void resolveV1Imports(XRefProblemReporter reporter) { + for (IdToken idToken : getSymbolTokens()) { + Pair<String, String> v2Definition = findV2Definition(idToken.getId()); + if (v2Definition != null) { + // notice we are not setting the m_module in this case! + SmiModule module = m_importerModule.getMib().findModule(v2Definition.getFirst()); + if (module != null) { + SmiSymbol symbol = module.findSymbol(v2Definition.getSecond()); + if (symbol != null) { + m_symbolMap.put(idToken.getId(), symbol); + } else { + reporter.reportCannotFindImportedSymbol(idToken, m_moduleToken); + } + } else { + reporter.reportCannotFindModule(m_moduleToken); + } + } else { + reporter.reportCannotFindImportedSymbol(idToken, m_moduleToken); + } + } + } + + public Pair<String, String> findV2Definition(String id) { + for (int i = 0; i < V1_V2_MAP.length; i += 4) { + String oldMib = V1_V2_MAP[i]; + String oldId = V1_V2_MAP[i + 1]; + if (oldMib.equals(m_moduleToken.getId()) + && oldId.equals(id)) { + return new Pair<String, String>(V1_V2_MAP[i + 2], V1_V2_MAP[i + 3]); + } + } + return null; + } + } Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiMib.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiMib.java 2007-12-27 12:15:22 UTC (rev 193) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiMib.java 2007-12-27 13:40:17 UTC (rev 194) @@ -28,6 +28,7 @@ public class SmiMib { private Map<String, SmiModule> m_moduleMap = new LinkedHashMap<String, SmiModule>(); + private final SmiOptions m_options; private SmiCodeNamingStrategy m_codeNamingStrategy; private SmiOidNode m_rootNode; @@ -45,7 +46,9 @@ int m_dummyOidNodesCount; private SmiModule m_internalModule; - public SmiMib(SmiCodeNamingStrategy codeNamingStrategy) { + public SmiMib(SmiOptions options, SmiCodeNamingStrategy codeNamingStrategy) { + m_options = options; + //assert(codeNamingStrategy != null); m_codeNamingStrategy = codeNamingStrategy; @@ -77,7 +80,10 @@ public Collection<SmiModule> getModules() { return m_moduleMap.values(); + } + public SmiOptions getOptions() { + return m_options; } public SmiCodeNamingStrategy getCodeNamingStrategy() { Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiModule.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiModule.java 2007-12-27 12:15:22 UTC (rev 193) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiModule.java 2007-12-27 13:40:17 UTC (rev 194) @@ -394,10 +394,9 @@ private SmiSymbol findImportedSymbol(String id) { for (SmiImports imports : m_imports) { - for (SmiSymbol symbol : imports.getSymbols()) { - if (symbol.getId().equals(id)) { - return symbol; - } + SmiSymbol symbol = imports.find(id); + if (symbol != null) { + return symbol; } } return null; Added: trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiOptions.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiOptions.java (rev 0) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiOptions.java 2007-12-27 13:40:17 UTC (rev 194) @@ -0,0 +1,29 @@ +/* + * Copyright 2007 Davy Verstappen. + * + * 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.jsmiparser.smi; + +public class SmiOptions { + + private boolean m_convertV1ImportsToV2; + + public boolean isConvertV1ImportsToV2() { + return m_convertV1ImportsToV2; + } + + public void setConvertV1ImportsToV2(boolean convertV1ImportsToV2) { + m_convertV1ImportsToV2 = convertV1ImportsToV2; + } +} Added: trunk/jsmiparser-api/src/test/java/org/jsmiparser/MixedV1V2Test.java =================================================================== --- trunk/jsmiparser-api/src/test/java/org/jsmiparser/MixedV1V2Test.java (rev 0) +++ trunk/jsmiparser-api/src/test/java/org/jsmiparser/MixedV1V2Test.java 2007-12-27 13:40:17 UTC (rev 194) @@ -0,0 +1,53 @@ +/* + * Copyright 2007 Davy Verstappen. + * + * 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.jsmiparser; + +import junit.framework.TestCase; + +import java.net.URL; +import java.net.MalformedURLException; +import java.util.List; +import java.util.ArrayList; + +import org.jsmiparser.parser.SmiDefaultParser; + +public class MixedV1V2Test extends TestCase { + + public void testToV2() throws MalformedURLException { + String[] mibFileNames = { "TOKEN-RING-RMON-MIB", "RFC1271-MIB", "SNMPv2-SMI", "SNMPv2-TC"}; + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + URL resource = cl.getResource("libsmi-0.4.5/mibs/ietf"); + assertNotNull(resource); + List<URL> urls = new ArrayList<URL>(); + for (String fn : mibFileNames) { + URL url = new URL(resource + "/" + fn); + urls.add(url); + } + + SmiDefaultParser parser = new SmiDefaultParser(); + parser.getOptions().setConvertV1ImportsToV2(true); + parser.getFileParserPhase().setInputUrls(urls); + //URL fixerUrl = PropertiesXRefFixer.class.getResource("v1_to_v2.properties"); + //assertNotNull(fixerUrl); + //parser.getXRefPhase().setFixer(new PropertiesXRefFixer(fixerUrl)); + + parser.parse(); + + assertEquals(0, parser.getProblemEventHandler().getTotalCount()); + + } + +} Modified: trunk/jsmiparser-api/src/test/java/org/jsmiparser/phase/file/antlr/IFParseTest.java =================================================================== --- trunk/jsmiparser-api/src/test/java/org/jsmiparser/phase/file/antlr/IFParseTest.java 2007-12-27 12:15:22 UTC (rev 193) +++ trunk/jsmiparser-api/src/test/java/org/jsmiparser/phase/file/antlr/IFParseTest.java 2007-12-27 13:40:17 UTC (rev 194) @@ -19,6 +19,7 @@ import antlr.TokenStreamException; import junit.framework.TestCase; import org.jsmiparser.smi.SmiMib; +import org.jsmiparser.smi.SmiOptions; import java.io.BufferedInputStream; import java.io.File; @@ -46,7 +47,7 @@ SMILexer lexer = new SMILexer(is); SMIParser parser = new SMIParser(lexer); - parser.init(new SmiMib(null), inputFile.getPath()); + parser.init(new SmiMib(new SmiOptions(), null), inputFile.getPath()); //ASNModule module = parser.module_definition(); Modified: trunk/jsmiparser-api/src/test/java/org/jsmiparser/smi/SmiModuleTest.java =================================================================== --- trunk/jsmiparser-api/src/test/java/org/jsmiparser/smi/SmiModuleTest.java 2007-12-27 12:15:22 UTC (rev 193) +++ trunk/jsmiparser-api/src/test/java/org/jsmiparser/smi/SmiModuleTest.java 2007-12-27 13:40:17 UTC (rev 194) @@ -20,7 +20,7 @@ import org.jsmiparser.util.location.Location; public class SmiModuleTest extends TestCase { - private SmiMib m_mib = new SmiMib(new SmiJavaCodeNamingStrategy("test")); + private SmiMib m_mib = new SmiMib(new SmiOptions(), new SmiJavaCodeNamingStrategy("test")); private SmiModule m_module = new SmiModule(m_mib, new IdToken(new Location("IF-MIBsource", 1, 0), "IF-MIB")); public void testGetJavaId() { Modified: trunk/jsmiparser-api/src/test/resources/org/jsmiparser/SpringTest.xml =================================================================== --- trunk/jsmiparser-api/src/test/resources/org/jsmiparser/SpringTest.xml 2007-12-27 12:15:22 UTC (rev 193) +++ trunk/jsmiparser-api/src/test/resources/org/jsmiparser/SpringTest.xml 2007-12-27 13:40:17 UTC (rev 194) @@ -33,6 +33,9 @@ </property> </bean> </property> + <property name="options"> + <bean class="org.jsmiparser.smi.SmiOptions"/> + </property> </bean> <bean id="mib" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2007-12-27 12:15:27
|
Revision: 193 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=193&view=rev Author: stappend Date: 2007-12-27 04:15:22 -0800 (Thu, 27 Dec 2007) Log Message: ----------- upgraded to spring 2.0.7 Modified Paths: -------------- trunk/jsmiparser-api/pom.xml Modified: trunk/jsmiparser-api/pom.xml =================================================================== --- trunk/jsmiparser-api/pom.xml 2007-05-07 19:26:25 UTC (rev 192) +++ trunk/jsmiparser-api/pom.xml 2007-12-27 12:15:22 UTC (rev 193) @@ -36,28 +36,28 @@ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> - <version>2.0.4</version> + <version>2.0.7</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> - <version>2.0.4</version> + <version>2.0.7</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> - <version>2.0.4</version> + <version>2.0.7</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-mock</artifactId> - <version>2.0.4</version> + <version>2.0.7</version> <scope>test</scope> </dependency> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2007-05-07 19:26:26
|
Revision: 192 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=192&view=rev Author: stappend Date: 2007-05-07 12:26:25 -0700 (Mon, 07 May 2007) Log Message: ----------- [maven-release-plugin] prepare for next development iteration Modified Paths: -------------- trunk/jsmiparser-api/pom.xml trunk/jsmiparser-util/pom.xml trunk/pom.xml Modified: trunk/jsmiparser-api/pom.xml =================================================================== --- trunk/jsmiparser-api/pom.xml 2007-05-07 19:26:17 UTC (rev 191) +++ trunk/jsmiparser-api/pom.xml 2007-05-07 19:26:25 UTC (rev 192) @@ -3,13 +3,13 @@ <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser-api</artifactId> <packaging>jar</packaging> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <name>Java SMI Parser API</name> <parent> <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser</artifactId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <dependencies> Modified: trunk/jsmiparser-util/pom.xml =================================================================== --- trunk/jsmiparser-util/pom.xml 2007-05-07 19:26:17 UTC (rev 191) +++ trunk/jsmiparser-util/pom.xml 2007-05-07 19:26:25 UTC (rev 192) @@ -3,13 +3,13 @@ <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser-util</artifactId> <packaging>jar</packaging> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <name>Java SMI Parser Utilities</name> <parent> <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser</artifactId> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> </parent> <dependencies> Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2007-05-07 19:26:17 UTC (rev 191) +++ trunk/pom.xml 2007-05-07 19:26:25 UTC (rev 192) @@ -3,7 +3,7 @@ <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser</artifactId> <packaging>pom</packaging> - <version>0.5</version> + <version>0.6-SNAPSHOT</version> <name>Java SMI Parser</name> <url>http://www.jsmiparser.org</url> <inceptionYear>2005</inceptionYear> @@ -30,9 +30,9 @@ </modules> <scm> - <connection>scm:svn:http://jsmiparser.svn.sf.net/svnroot/jsmiparser/tags/jsmiparser-0.5</connection> - <developerConnection>scm:svn:https://jsmiparser.svn.sf.net/svnroot/jsmiparser/tags/jsmiparser-0.5</developerConnection> - <url>http://jsmiparser.svn.sourceforge.net/viewvc/jsmiparser/tags/jsmiparser-0.5</url> + <connection>scm:svn:http://jsmiparser.svn.sf.net/svnroot/jsmiparser/trunk</connection> + <developerConnection>scm:svn:https://jsmiparser.svn.sf.net/svnroot/jsmiparser/trunk</developerConnection> + <url>http://jsmiparser.svn.sourceforge.net/viewvc/jsmiparser/</url> </scm> <issueManagement> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2007-05-07 19:26:19
|
Revision: 191 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=191&view=rev Author: stappend Date: 2007-05-07 12:26:17 -0700 (Mon, 07 May 2007) Log Message: ----------- [maven-scm] copy for tag jsmiparser-0.5 Added Paths: ----------- tags/jsmiparser-0.5/ tags/jsmiparser-0.5/jsmiparser-api/pom.xml tags/jsmiparser-0.5/jsmiparser-api/src/main/antlr/SMIParser.g tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/Phase.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/check/ErrorCheckPhase.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserProblemReporter.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/ModuleParser.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/AbstractSMIv1SymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/AbstractSymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/RFC1065_SMISymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/RFC1155_SMISymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/RFC_1212SymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/RFC_1215SymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/SNMPv2_CONFSymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/SNMPv2_SMISymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/SNMPv2_TCSymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/SymbolDefiner.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/XRefPhase.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/XRefProblemReporter.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiConstants.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiModule.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiProtocolType.java tags/jsmiparser-0.5/jsmiparser-api/src/test/java/org/jsmiparser/AbstractMibTestCase.java tags/jsmiparser-0.5/jsmiparser-api/src/test/java/org/jsmiparser/SpringTest.java tags/jsmiparser-0.5/jsmiparser-api/src/test/java/org/jsmiparser/parser/CyclicDepsTest.java tags/jsmiparser-0.5/jsmiparser-api/src/test/java/org/jsmiparser/parser/SmiDefaultParserTest.java tags/jsmiparser-0.5/jsmiparser-api/src/test/resources/org/ tags/jsmiparser-0.5/jsmiparser-util/pom.xml tags/jsmiparser-0.5/jsmiparser-util/src/main/java/org/jsmiparser/util/pair/ tags/jsmiparser-0.5/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/DefaultProblemReporterFactory.java tags/jsmiparser-0.5/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/ProblemReporterFactory.java tags/jsmiparser-0.5/jsmiparser-util/src/main/java/org/jsmiparser/util/token/AbstractToken.java tags/jsmiparser-0.5/jsmiparser-util/src/main/java/org/jsmiparser/util/url/ tags/jsmiparser-0.5/pom.xml Removed Paths: ------------- tags/jsmiparser-0.5/jsmiparser-api/pom.xml tags/jsmiparser-0.5/jsmiparser-api/src/main/antlr/SMIParser.g tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/Phase.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/check/ErrorCheckPhase.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserOptions.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserProblemReporter.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/ModuleParser.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/XRefPhase.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/XRefProblemReporter.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiConstants.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiModule.java tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/smi/SmiProtocolType.java tags/jsmiparser-0.5/jsmiparser-api/src/test/java/org/jsmiparser/AbstractMibTestCase.java tags/jsmiparser-0.5/jsmiparser-api/src/test/java/org/jsmiparser/parser/CyclicDepsTest.java tags/jsmiparser-0.5/jsmiparser-api/src/test/java/org/jsmiparser/parser/SmiDefaultParserTest.java tags/jsmiparser-0.5/jsmiparser-util/pom.xml tags/jsmiparser-0.5/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/DefaultProblemReporterFactory.java tags/jsmiparser-0.5/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/ProblemReporterFactory.java tags/jsmiparser-0.5/jsmiparser-util/src/main/java/org/jsmiparser/util/token/AbstractToken.java tags/jsmiparser-0.5/pom.xml Copied: tags/jsmiparser-0.5 (from rev 184, trunk) Deleted: tags/jsmiparser-0.5/jsmiparser-api/pom.xml =================================================================== --- trunk/jsmiparser-api/pom.xml 2007-04-17 19:36:08 UTC (rev 184) +++ tags/jsmiparser-0.5/jsmiparser-api/pom.xml 2007-05-07 19:26:17 UTC (rev 191) @@ -1,86 +0,0 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <groupId>org.jsmiparser</groupId> - <artifactId>jsmiparser-api</artifactId> - <packaging>jar</packaging> - <version>0.5-SNAPSHOT</version> - <name>Java SMI Parser API</name> - - <parent> - <groupId>org.jsmiparser</groupId> - <artifactId>jsmiparser</artifactId> - <version>0.5-SNAPSHOT</version> - </parent> - - <dependencies> - - <dependency> - <groupId>org.jsmiparser</groupId> - <artifactId>jsmiparser-util</artifactId> - <version>${pom.version}</version> - </dependency> - - <dependency> - <groupId>antlr</groupId> - <artifactId>antlr</artifactId> - <version>2.7.6</version> - </dependency> - - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>3.8.2</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-core</artifactId> - <version>2.0.3</version> - <scope>test</scope> - </dependency> - - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-antlr-plugin</artifactId> - <version>2.0-beta-1</version> - <executions> - <execution> - <goals> - <goal>generate</goal> - </goals> - </execution> - </executions> - <configuration> - <grammars>SMIParser.g</grammars> - </configuration> - <!-- maven-antlr-plugin compiles the grammer using antlr:antlrall:2.7.4, - but there is no antlr:antlrall:2.7.6 - <dependencies> - <dependency> - <groupId>antlr</groupId> - <artifactId>antlrall</artifactId> - <version>2.7.6</version> - </dependency> - </dependencies> - --> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <executions> - <execution> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - -</project> \ No newline at end of file Copied: tags/jsmiparser-0.5/jsmiparser-api/pom.xml (from rev 190, trunk/jsmiparser-api/pom.xml) =================================================================== --- tags/jsmiparser-0.5/jsmiparser-api/pom.xml (rev 0) +++ tags/jsmiparser-0.5/jsmiparser-api/pom.xml 2007-05-07 19:26:17 UTC (rev 191) @@ -0,0 +1,107 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.jsmiparser</groupId> + <artifactId>jsmiparser-api</artifactId> + <packaging>jar</packaging> + <version>0.5</version> + <name>Java SMI Parser API</name> + + <parent> + <groupId>org.jsmiparser</groupId> + <artifactId>jsmiparser</artifactId> + <version>0.5</version> + </parent> + + <dependencies> + + <dependency> + <groupId>org.jsmiparser</groupId> + <artifactId>jsmiparser-util</artifactId> + <version>${pom.version}</version> + </dependency> + + <dependency> + <groupId>antlr</groupId> + <artifactId>antlr</artifactId> + <version>2.7.6</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.2</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + <version>2.0.4</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + <version>2.0.4</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + <version>2.0.4</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-mock</artifactId> + <version>2.0.4</version> + <scope>test</scope> + </dependency> + + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antlr-plugin</artifactId> + <version>2.0-beta-1</version> + <executions> + <execution> + <goals> + <goal>generate</goal> + </goals> + </execution> + </executions> + <configuration> + <grammars>SMIParser.g</grammars> + </configuration> + <!-- maven-antlr-plugin compiles the grammer using antlr:antlrall:2.7.4, + but there is no antlr:antlrall:2.7.6 + <dependencies> + <dependency> + <groupId>antlr</groupId> + <artifactId>antlrall</artifactId> + <version>2.7.6</version> + </dependency> + </dependencies> + --> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>test-jar</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + +</project> \ No newline at end of file Deleted: tags/jsmiparser-0.5/jsmiparser-api/src/main/antlr/SMIParser.g =================================================================== --- trunk/jsmiparser-api/src/main/antlr/SMIParser.g 2007-04-17 19:36:08 UTC (rev 184) +++ tags/jsmiparser-0.5/jsmiparser-api/src/main/antlr/SMIParser.g 2007-05-07 19:26:17 UTC (rev 191) @@ -1,1038 +0,0 @@ -/* - * Copyright 2004 Davy Verstappen - * Portions Copyright (C) 2003 Vivek Gupta - * Portions Copyright (C) 2005 Nigel Sheridan-Smith - * - * 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. - */ - -header { -package org.jsmiparser.phase.file.antlr; - -import org.jsmiparser.util.token.*; -import org.jsmiparser.smi.*; -import org.jsmiparser.phase.file.*; -import org.jsmiparser.util.location.Location; - -import antlr.*; -import java.lang.* ; -import java.math.*; -import java.util.*; -} - -// Creation of ASN.1 grammar for ANTLR V2.7.1 -// =================================================== -// TOKENS FOR ASN.1 LEXER DEFINITIONS -// =================================================== - -class SMILexer extends Lexer; -options { - k = 3; - exportVocab=SMI; - charVocabulary = '\3'..'\377'; - caseSensitive=true; - testLiterals = true; - codeGenMakeSwitchThreshold = 2; // Some optimizations - codeGenBitsetTestThreshold = 3; -} - -// ASN1 Tokens - -tokens { - -ABSENT_KW = "ABSENT" ; -ABSTRACT_SYNTAX_KW = "ABSTRACT-SYNTAX" ; -ALL_KW= "ALL" ; -ANY_KW = "ANY" ; -ARGUMENT_KW = "ARGUMENT" ; -APPLICATION_KW = "APPLICATION" ; -AUTOMATIC_KW = "AUTOMATIC" ; -BASED_NUM_KW = "BASEDNUM" ; -BEGIN_KW = "BEGIN" ; -BIT_KW = "BIT" ; -BMP_STRING_KW = "BMPString" ; -BOOLEAN_KW = "BOOLEAN" ; -BY_KW = "BY" ; -CHARACTER_KW = "CHARACTER" ; -CHOICE_KW = "CHOICE" ; -CLASS_KW = "CLASS" ; -COMPONENTS_KW = "COMPONENTS" ; -COMPONENT_KW = "COMPONENT" ; -CONSTRAINED_KW = "CONSTRAINED" ; -DEFAULT_KW = "DEFAULT" ; -DEFINED_KW = "DEFINED" ; -DEFINITIONS_KW = "DEFINITIONS" ; -EMBEDDED_KW = "EMBEDDED" ; -END_KW = "END" ; -ENUMERATED_KW = "ENUMERATED" ; -ERROR_KW = "ERROR" ; -ERRORS_KW = "ERRORS" ; -EXCEPT_KW = "EXCEPT" ; -EXPLICIT_KW = "EXPLICIT" ; -EXPORTS_KW = "EXPORTS" ; -EXTENSIBILITY_KW = "EXTENSIBILITY" ; -EXTERNAL_KW = "EXTERNAL" ; -FALSE_KW = "FALSE" ; -FROM_KW = "FROM" ; -GENERALIZED_TIME_KW = "GeneralizedTime" ; -GENERAL_STR_KW = "GeneralString" ; -GRAPHIC_STR_KW = "GraphicString" ; -IA5_STRING_KW = "IA5String" ; -IDENTIFIER_KW = "IDENTIFIER" ; -IMPLICIT_KW = "IMPLICIT" ; -IMPLIED_KW = "IMPLIED" ; -IMPORTS_KW = "IMPORTS" ; -INCLUDES_KW = "INCLUDES" ; -INSTANCE_KW = "INSTANCE" ; -INTEGER_KW = "INTEGER" ; -INTERSECTION_KW = "INTERSECTION" ; -ISO646STRING_KW = "ISO646String" ; -LINKED_KW = "LINKED" ; -MAX_KW = "MAX" ; -MINUS_INFINITY_KW = "MINUSINFINITY" ; -MIN_KW = "MIN" ; -NULL_KW = "NULL" ; -NUMERIC_STR_KW = "NumericString" ; -OBJECT_DESCRIPTOR_KW = "ObjectDescriptor" ; -OBJECT_KW = "OBJECT" ; -OCTET_KW = "OCTET" ; -OPERATION_KW = "OPERATION" ; -OF_KW = "OF" ; -OID_KW = "OID" ; -OPTIONAL_KW = "OPTIONAL" ; -PARAMETER_KW = "PARAMETER" ; -PDV_KW = "PDV" ; -PLUS_INFINITY_KW = "PLUSINFINITY" ; -PRESENT_KW = "PRESENT" ; -PRINTABLE_STR_KW = "PrintableString" ; -PRIVATE_KW = "PRIVATE" ; -REAL_KW = "REAL" ; -RELATIVE_KW = "RELATIVE" ; -RESULT_KW = "RESULT" ; -SEQUENCE_KW = "SEQUENCE" ; -SET_KW = "SET" ; -SIZE_KW = "SIZE" ; -STRING_KW = "STRING" ; -TAGS_KW = "TAGS" ; -TELETEX_STR_KW = "TeletexString" ; -TRUE_KW = "TRUE" ; -TYPE_IDENTIFIER_KW = "TYPE-IDENTIFIER" ; -UNION_KW = "UNION" ; -UNIQUE_KW = "UNIQUE" ; -UNIVERSAL_KW = "UNIVERSAL" ; -UNIVERSAL_STR_KW = "UniversalString" ; -UTC_TIME_KW = "UTCTime" ; -UTF8STRING_KW = "UTF8String" ; -VIDEOTEX_STR_KW = "VideotexString" ; -VISIBLE_STR_KW = "VisibleString" ; -WITH_KW = "WITH" ; -} - -// Operators - -ASSIGN_OP: "::="; -BAR: '|'; -COLON: ':'; -COMMA: ','; -COMMENT: "--"; -DOT: '.'; -DOTDOT: ".."; -ELLIPSIS: "..."; -EXCLAMATION: '!'; -INTERSECTION: '^'; -LESS: '<'; -L_BRACE: '{'; -L_BRACKET: '['; -L_PAREN: '('; -MINUS: '-'; -PLUS: '+'; -R_BRACE: '}'; -R_BRACKET: ']'; -R_PAREN: ')'; -SEMI: ';'; -SINGLE_QUOTE: "'"; -CHARB: "'B"; -CHARH: "'H"; - -// Whitespace -- ignored - -WS -: - ( ' ' - | '\t' - | '\f' - | ( options {generateAmbigWarnings=false;} - : - "\r\n" { newline(); }// DOS - | '\r' { newline(); }// Macintosh - | '\n' { newline(); }// Unix - ) - )+ -{ - $setType(Token.SKIP); -} -; - -SMIC_DIRECTIVE -: -( - "SMI" WS ("OBJECT-TYPE"|"TRAP-TYPE") -) -{ - $setType(Token.SKIP); -} -; - -INCLUDE -: - "#include" - (~('-'|'\n'|'\r'))* - (('\r')? '\n') { newline(); } -{ - $setType(Token.SKIP); -} -; - -/* -// Single-line comments -SL_COMMENT -: -(options {warnWhenFollowAmbig=false;} -: - COMMENT - ( { LA(2)!='-' }? '-' | ~('-'|'\n'|'\r'))* - ( (('\r')? '\n') { newline(); } | COMMENT) -) -{ - $setType(Token.SKIP); -} -; -*/ - -SL_COMMENT -: -(options {warnWhenFollowAmbig=false;} -: - COMMENT - ( ~('\n'|'\r'))* - ( (('\r')? '\n') { newline(); }) -) -{ - $setType(Token.SKIP); -} -; - - -NUMBER : ('0'..'9')+ ; - -// TODO in principle, underscores are not allowed in UPPER/LOWER identifiers -UPPER -options {testLiterals = false;} - : ('A'..'Z') - (options {warnWhenFollowAmbig = false;} - : ( 'a'..'z' | 'A'..'Z' | '-' | '_' | '0'..'9' ))* -; - -LOWER -options {testLiterals = false;} - : ('a'..'z') - (options {warnWhenFollowAmbig = false;} - : ( 'a'..'z' | 'A'..'Z' | '-' | '_' | '0'..'9' ))* -; - - -protected -BDIG : ('0'|'1') ; -protected -HDIG : (options {warnWhenFollowAmbig = false;} :('0'..'9') ) - | ('A'..'F') - | ('a'..'f') - ; - -// Unable to resolve a string like 010101 followed by 'H -//B_STRING : SINGLE_QUOTE ({LA(3)!='B'}? BDIG)+ BDIG SINGLE_QUOTE 'B'; -//H_STRING : SINGLE_QUOTE ({LA(3)!='H'}? HDIG)+ HDIG SINGLE_QUOTE 'H'; - -// TODO remove: ? -B_OR_H_STRING - : (options {warnWhenFollowAmbig = false;} - :(B_STRING)=>B_STRING {$setType(B_STRING);} - | H_STRING {$setType(H_STRING);}) - ; - -/* Changed by NSS 13/1/05 - upper case *or* lower case 'B' and 'H'; zero or more digits */ -protected -B_STRING : SINGLE_QUOTE (BDIG)* SINGLE_QUOTE ('B' | 'b') ; -protected -H_STRING : SINGLE_QUOTE (HDIG)* SINGLE_QUOTE ('H' | 'h') ; - - -C_STRING : '"' (options {greedy=false;} - : "\r\n" { newline(); }// DOS - | '\r' { newline(); }// Macintosh - | '\n' { newline(); }// Unix - | ~('\r' | '\n') - )* - '"' ; - - - -//************************************************************************* -//********** PARSER DEFINITIONS -//************************************************************************* - - -class SMIParser extends Parser; -options { - exportVocab=SMI; - k=3; - defaultErrorHandler=false; -} - -{ - private SmiMib m_mib; - private String m_locationPath; - private ModuleParser m_mp; - - public void init(SmiMib mib, String locationPath) { - m_mib = mib; - m_locationPath = locationPath; - } - - SmiModule beginModule(Token idToken) { - if (m_mp != null) { - throw new IllegalStateException("Module " + m_mp.getModule().getIdToken() + " is still being parsed when trying to create new module " + idToken); - } - SmiModule module = m_mib.createModule(idt(idToken)); - m_mp = new ModuleParser(module); - return module; - } - - private void endModule() { - if (m_mp == null) { - throw new IllegalStateException("No module is being parsed"); - } - m_mp = null; - } - - private Location makeLocation(Token token) { - return new Location(m_locationPath, token.getLine(), token.getColumn()); - } - - private IdToken idt(Token idToken) { - return new IdToken(makeLocation(idToken), idToken.getText()); - } - -} - - - -module_definition returns [SmiModule result = null] -: - EOF | - result=module_identifier DEFINITIONS_KW ASSIGN_OP - BEGIN_KW - module_body - END_KW { endModule(); } -; - -module_identifier returns [SmiModule result = null] -: - ( u:UPPER | l:LOWER ) -{ - // TODO error msg: only upper is correct - result = beginModule(u != null ? u : l); -} -; - -module_body -: - (exports)? - (imports)? - (assignment)* -; - -exports -: - EXPORTS_KW (symbol_list) SEMI -; - -imports -: - IMPORTS_KW (symbols_from_module)* SEMI -; - -symbols_from_module -{ - List<IdToken> idTokenList = null; - IdToken m = null; -} -: - idTokenList=symbol_list FROM_KW m=upper -{ - m_mp.addImports(m, idTokenList); -} -; - -symbol_list returns [List<IdToken> result = m_mp.makeIdTokenList()] -{ - IdToken s1 = null, s2 = null; -} -: - s1=symbol { result.add(s1); } - (COMMA s2=symbol { result.add(s2); } )* -; - -symbol returns [IdToken result = null] -: - result=upper - | result=lower - | result=macroName -; - - - -macroName returns [IdToken result = null] -: -( - ot:"OBJECT-TYPE" - | mi:"MODULE-IDENTITY" { m_mp.getModule().incV2Features(); } - | oi:"OBJECT-IDENTITY" { m_mp.getModule().incV2Features(); } - | nt:"NOTIFICATION-TYPE" { m_mp.getModule().incV2Features(); } - | tc:"TEXTUAL-CONVENTION" { m_mp.getModule().incV2Features(); } - | og:"OBJECT-GROUP" { m_mp.getModule().incV2Features(); } - | ng:"NOTIFICATION-GROUP" { m_mp.getModule().incV2Features(); } - | mc:"MODULE-COMPLIANCE" { m_mp.getModule().incV2Features(); } - | ac:"AGENT-CAPABILITIES" { m_mp.getModule().incV2Features(); } - | tt:"TRAP-TYPE"{ m_mp.getModule().incV1Features(); } -) -{ - result = m_mp.idt(ot, mi, oi, nt, tc, og, ng, mc, ac, tt); -} -; - - -assignment returns [SmiSymbol s = null] -{ - IdToken intToken = null; - SmiType type = null; - IdToken mn = null; -} -: - ( - u:UPPER ASSIGN_OP s=type_assignment[m_mp.idt(u)] - | l:LOWER s=value_assignment[m_mp.idt(l)] - | mn=macroName "MACRO" ASSIGN_OP BEGIN_KW ( ~(END_KW) )* END_KW { s = m_mp.createMacro(mn); } - ) - { - m_mp.addSymbol(s); - } -; - -type_assignment[IdToken idToken] returns [SmiType t = null] -: - t=textualconvention_macro[idToken] - | t=leaf_type[idToken] - | t=sequence_type[idToken] - | t=choice_type[idToken] -; - -// valid type for a leaf node (scalar or column) -leaf_type[IdToken idToken] returns [SmiType t = null] -: - ( L_BRACKET APPLICATION_KW n:NUMBER R_BRACKET IMPLICIT_KW )? // only used for ApplicationSyntax types - ( - t=integer_type[idToken, n] - | t=oid_type[idToken] - | t=octet_string_type[idToken, n] - | t=bits_type[idToken] - | t=defined_type[idToken] - ) -; - -integer_type[IdToken idToken, Token applicationTagToken] returns [SmiType t = null] -{ - IntKeywordToken intToken; - List<SmiNamedNumber> namedNumbers = null; - List<SmiRange> rangeConstraints = null; -} -: - intToken=integer_type_kw[idToken] - (namedNumbers=named_number_list | rangeConstraints=range_constraint)? - { - t = m_mp.createIntegerType(idToken, intToken, applicationTagToken, namedNumbers, rangeConstraints); - } -; - -// TODO should get these SmiType objects from the imports -// TODO should return SmiPrimitiveTypeIdToken here -integer_type_kw[IdToken idToken] returns [IntKeywordToken t = null] -: - i:INTEGER_KW { t = m_mp.intkt(i, SmiPrimitiveType.INTEGER, null); } -; - - -oid_type[IdToken idToken] returns [SmiType t = null] -: - OBJECT_KW IDENTIFIER_KW -{ - t = m_mp.createType(idToken, SmiConstants.OBJECT_IDENTIFIER_TYPE); -} -; - -octet_string_type[IdToken idToken, Token applicationTagToken] returns [SmiType type = null] -{ - List<SmiRange> sizeConstraints = null; -} -: - OCTET_KW STRING_KW (sizeConstraints=size_constraint)? - { - type = m_mp.createOctetStringType(idToken, applicationTagToken, sizeConstraints); - } -; - - -bits_type[IdToken idToken] returns [SmiType type = null] -{ - List<SmiNamedNumber> namedNumbers = null; -} -: - "BITS" (namedNumbers=named_number_list)? - { - type = m_mp.createBitsType(idToken, namedNumbers); - } -; - -// only used for NetworkAddress, ObjectSyntax, SimpleSyntax and ApplicationSyntax -choice_type[IdToken idToken] returns [SmiType t = null] -: - "CHOICE" L_BRACE ( ~(R_BRACE) )* R_BRACE - { - return m_mp.createProtocolType(idToken); - } -; - -defined_type[IdToken idToken] returns [SmiType type = null] -{ - List<SmiNamedNumber> namedNumbers = null; - List<SmiRange> sizeConstraints = null; - List<SmiRange> rangeConstraints = null; -} -: - (mt:UPPER DOT)? tt:UPPER - (namedNumbers=named_number_list | sizeConstraints=size_constraint | rangeConstraints=range_constraint)? - { - type = m_mp.createDefinedType(idToken, mt, tt, namedNumbers, sizeConstraints, rangeConstraints); - } -; - -sequence_type[IdToken idToken] returns [SmiType t = null] -: - SEQUENCE_KW { t = m_mp.createSequenceType(idToken); } - L_BRACE - sequence_field[t] - (COMMA sequence_field[t])* - R_BRACE -; - -sequence_field[SmiType sequenceType] -{ - SmiType fieldType = null; -} -: - l: LOWER - fieldType=leaf_type[null] -{ - m_mp.addField(sequenceType, l, fieldType); -} -; - -sequenceof_type returns [SmiType t = null] -: - SEQUENCE_KW OF_KW u:UPPER -{ - t = m_mp.createSequenceOfType(u); -} -; - -// for strings -// TODO rename to size_constraints -size_constraint returns [List<SmiRange> rc = null] -: - L_PAREN "SIZE" - rc=range_constraint - R_PAREN -; - -// for integers -// TODO rename to range_constraints -range_constraint returns [List<SmiRange> rc = null] -: - L_PAREN { rc = new ArrayList<SmiRange>(); } - range[rc] - (BAR range[rc])* - R_PAREN -; - -range[List<SmiRange> rc] -{ - org.jsmiparser.util.token.Token rv1 = null; - org.jsmiparser.util.token.Token rv2 = null; -} -: - rv1=range_value - (DOTDOT rv2=range_value)? -{ - m_mp.addRange(rc, rv1, rv2); -} -; - -range_value returns [org.jsmiparser.util.token.Token t = null] -: - t=big_integer_token - | t=binary_string_token - | t=hex_string_token -; - - -// VALUES - -value_assignment[IdToken idToken] returns [SmiValue v = null] -: - v=macro_value_assignment[idToken] - | v=oid_value_assignment[idToken] -; - -oid_value_assignment[IdToken idToken] returns [SmiOidValue v = null] -{ - OidComponent last = null; -} -: - OBJECT_KW IDENTIFIER_KW ASSIGN_OP last=oid_sequence[idToken] -{ - v = m_mp.createOidValue(idToken, last); -} -; - -macro_value_assignment[IdToken idToken] returns [SmiValue v = null] -: - v=oid_macro_value_assignment[idToken] - | int_macro_value_assignment -; - -oid_macro_value_assignment[IdToken idToken] returns [SmiOidMacro v = null] -{ - OidComponent lastOidComponent = null; -} -: - (v=objecttype_macro[idToken] - | moduleidentity_macro - | objectidentity_macro - | notificationtype_macro - | objectgroup_macro - | notificationgroup_macro - | modulecompliance_macro - | agentcapabilities_macro) - ASSIGN_OP lastOidComponent=oid_sequence[idToken] - // TODO it's probably better to move the oid stuff into the macro def -{ - if (v == null) { // TODO temporary - v = m_mp.createOidMacro(idToken); - } - v.setLastOidComponent(lastOidComponent); -} -; - -int_macro_value_assignment -: - traptype_macro ASSIGN_OP NUMBER -; - - -leaf_value returns [SmiDefaultValue result = null] -{ - BigIntegerToken bit = null; - List<IdToken> bitsIdTokenList = null; - OidComponent lastOidComponent = null; - BinaryStringToken bst = null; - HexStringToken hst = null; - QuotedStringToken qst = null; - ScopedId scopedId = null; - boolean isNullValue = false; -} -: - (bit=big_integer_token - | (bits_value) => bitsIdTokenList=bits_value - | lastOidComponent=oid_sequence[null] - | bst=binary_string_token - | hst=hex_string_token - | qst=double_quoted_string_token - | scopedId=defined_value - | NULL_KW { isNullValue = true; } - ) -{ - result = new SmiDefaultValue(m_mp.getModule(), bit, bitsIdTokenList, lastOidComponent, bst, hst, qst, scopedId, isNullValue); -} -; - - -oid_sequence [IdToken idToken] returns [OidComponent last = null] -: - L_BRACE - (last = oid_component[last])+ - R_BRACE -; - -oid_component[OidComponent parent] returns [OidComponent oc = null] -: - nt1:NUMBER { oc = m_mp.createOidComponent(parent, null, nt1); } - | (lt:LOWER (L_PAREN nt2:NUMBER R_PAREN)?) { oc = m_mp.createOidComponent(parent, lt, nt2); } -; - -bits_value returns [List<IdToken> result = new ArrayList<IdToken>()] -: - L_BRACE (l1:LOWER { result.add(idt(l1)); } (COMMA l2:LOWER { result.add(idt(l2)); })*)? R_BRACE -; - -defined_value returns [ScopedId id=null] -: - (u:UPPER DOT)? l:LOWER { id = m_mp.makeScopedId(u, l); } -; - -// TODO: it might be possible to split this up into several -// definitions, thereby syntactically guaranteeing that INDEX/AUGMENTS -// belong only to rows, UNITS and DEFVAL only for variables. And -// REFERENCE? -objecttype_macro[IdToken idToken] returns [SmiObjectType ot = null] -{ - SmiType sequenceOfType = null; - SmiType type = null; - SmiVariable var = null; - SmiRow row = null; - SmiTable table = null; - StatusAll status = null; - SmiDefaultValue defaultValue = null; -} -: - "OBJECT-TYPE" "SYNTAX" - ( type=leaf_type[null] - | sequenceOfType = sequenceof_type ) - ("UNITS" units:C_STRING)? // TODO only on SmiVariable - ( ("ACCESS" access:LOWER) - | ("MAX-ACCESS" maxAccess:LOWER) )? - "STATUS" status=status_all - ( "DESCRIPTION" desc:C_STRING )? /* TODO optional only for SMIv1 */ - ( "REFERENCE" C_STRING )? - ( ("INDEX" row=objecttype_macro_index[idToken, type] - | "AUGMENTS" row=objecttype_macro_augments[idToken, type]) )? - ( "DEFVAL" L_BRACE defaultValue=leaf_value R_BRACE )? - - { - if (sequenceOfType != null) { - ot = table = m_mp.createTable(idToken, sequenceOfType); - } else if (row != null) { - ot = row; - } else { - ot = var = m_mp.createVariable(idToken, type, units, defaultValue); - } - if (access != null) { - ot.setAccessToken(m_mp.idt(access)); - } else { - ot.setMaxAccessToken(m_mp.idt(maxAccess)); - } - ot.setStatus(status); - ot.setDescription(m_mp.getOptCStr(desc)); - } -; - -status_all returns [StatusAll status = null] -: - l:LOWER -{ - status = StatusAll.find(l.getText(), true); -} -; - -status_v2 returns [StatusV2 status = null] -: - l:LOWER -{ - status = m_mp.findStatusV2(l.getText()); -} -; - - -objecttype_macro_index[IdToken idToken, SmiType type] returns [SmiRow row = m_mp.createRow(idToken, type)] -: - L_BRACE - objecttype_macro_indextype[row] - (COMMA objecttype_macro_indextype[row])* - R_BRACE -; - -objecttype_macro_indextype[SmiRow row] -{ - boolean implied=false; - ScopedId id; -} -: - ("IMPLIED" { implied=true; } )? - id=defined_value - { row.addIndex(id, implied); } -; - -objecttype_macro_augments[IdToken idToken, SmiType type] returns [SmiRow row = m_mp.createRow(idToken, type)] -{ - ScopedId id; -} -: - L_BRACE id=defined_value R_BRACE - { - row.setAugmentsId(id); - } -; - - - - -moduleidentity_macro -: - "MODULE-IDENTITY" - "LAST-UPDATED" C_STRING - "ORGANIZATION" C_STRING - "CONTACT-INFO" C_STRING - "DESCRIPTION" C_STRING - (moduleidentity_macro_revision)* -; - -moduleidentity_macro_revision -: - "REVISION" C_STRING - "DESCRIPTION" C_STRING -; - - -objectidentity_macro -: - "OBJECT-IDENTITY" - "STATUS" status_v2 - "DESCRIPTION" C_STRING ("REFERENCE" C_STRING)? -; - - -notificationtype_macro -: - "NOTIFICATION-TYPE" - ("OBJECTS" L_BRACE LOWER (COMMA LOWER)* R_BRACE)? - "STATUS" status_v2 - "DESCRIPTION" C_STRING ("REFERENCE" C_STRING)? -; - -textualconvention_macro[IdToken idToken] returns [SmiTextualConvention tc=null] -{ - SmiType type; - StatusV2 status; -} -: - "TEXTUAL-CONVENTION" - ("DISPLAY-HINT" displayHint:C_STRING)? - "STATUS" status=status_v2 - "DESCRIPTION" description:C_STRING - ("REFERENCE" reference:C_STRING)? - "SYNTAX" type=leaf_type[null] - { - tc = m_mp.createTextualConvention(idToken, displayHint, status, description, reference, type); - } -; - - -objectgroup_macro -: - "OBJECT-GROUP" "OBJECTS" - L_BRACE - LOWER (COMMA LOWER)* - R_BRACE - "STATUS" status_v2 - "DESCRIPTION" C_STRING - ("REFERENCE" C_STRING)? -; - - -notificationgroup_macro -: - "NOTIFICATION-GROUP" "NOTIFICATIONS" - L_BRACE - LOWER (COMMA LOWER)* - R_BRACE - "STATUS" status_v2 - "DESCRIPTION" C_STRING - ("REFERENCE" C_STRING)? -; - - -modulecompliance_macro -: - "MODULE-COMPLIANCE" - "STATUS" status_v2 - "DESCRIPTION" C_STRING - ("REFERENCE" C_STRING)? - (modulecompliance_macro_module)+ -; - -modulecompliance_macro_module -: - "MODULE" (UPPER)? - ("MANDATORY-GROUPS" L_BRACE LOWER (COMMA LOWER)* R_BRACE)? - (modulecompliance_macro_compliance)* -; - -modulecompliance_macro_compliance -: - modulecompliance_macro_compliance_group - | modulecompliance_macro_compliance_object -; - -modulecompliance_macro_compliance_group -: - "GROUP" LOWER - "DESCRIPTION" C_STRING -; - -modulecompliance_macro_compliance_object -: - "OBJECT" LOWER - ("SYNTAX" leaf_type[null])? - ("WRITE-SYNTAX" leaf_type[null])? - ("MIN-ACCESS" modulecompliance_access)? - "DESCRIPTION" C_STRING -; - -modulecompliance_access -: - l:LOWER -{ - ModuleComplianceAccess.find(l.getText(), true); -} -; - - -agentcapabilities_macro -: - "AGENT-CAPABILITIES" - "PRODUCT-RELEASE" C_STRING - "STATUS" agentcapabilities_status - "DESCRIPTION" C_STRING - ("REFERENCE" C_STRING)? - (agentcapabilities_macro_module)* -; - -agentcapabilities_status -: - l:LOWER -{ - AgentCapabilitiesStatus.find(l.getText(), true); -} -; - -agentcapabilities_macro_module -: - "SUPPORTS" UPPER - "INCLUDES" L_BRACE LOWER (COMMA LOWER)* R_BRACE - (agentcapabilities_macro_variation)* -; - -agentcapabilities_macro_variation -: - "VARIATION" LOWER - ("SYNTAX" leaf_type[null])? - ("WRITE-SYNTAX" leaf_type[null])? - ("ACCESS" agentcapabilities_access)? - ("CREATION-REQUIRES" L_BRACE LOWER (COMMA LOWER)* R_BRACE)? - ("DEFVAL" L_BRACE leaf_value R_BRACE)? - "DESCRIPTION" C_STRING -; - - -agentcapabilities_access -: - l:LOWER -{ - AgentCapabilitiesAccess.find(l.getText(), true); -} -; - - -traptype_macro -: - "TRAP-TYPE" - "ENTERPRISE" LOWER - ("VARIABLES" L_BRACE LOWER (COMMA LOWER)* R_BRACE)? - ("DESCRIPTION" C_STRING)? - ("REFERENCE" C_STRING)? -; - -named_number_list returns [List<SmiNamedNumber> l = new ArrayList<SmiNamedNumber>()] -: - L_BRACE - named_number[l] - (COMMA named_number[l])* - R_BRACE -; - -named_number[List<SmiNamedNumber> l] -{ - IdToken it = null; - BigIntegerToken bit = null; -} -: - it=lower L_PAREN bit=big_integer_token R_PAREN -{ - l.add(new SmiNamedNumber(it, bit)); -} -; - -big_integer_token returns [BigIntegerToken bit = null] -: - (mt:MINUS)? nt:NUMBER { bit = m_mp.bintt(mt, nt); } -; - -binary_string_token returns [BinaryStringToken t = null] -: - bt:B_STRING { t = m_mp.bst(bt); } -; - -hex_string_token returns [HexStringToken t = null] -: - ht:H_STRING { t = m_mp.hst(ht); } -; - -double_quoted_string_token returns [QuotedStringToken t = null] -: - ct:C_STRING { t = m_mp.dqst(ct); } -; - -upper returns [IdToken result = null] -: - u:UPPER -{ - result = m_mp.idt(u); -} -; - -lower returns [IdToken result = null] -: - l:LOWER -{ - result = m_mp.idt(l); -} -; Copied: tags/jsmiparser-0.5/jsmiparser-api/src/main/antlr/SMIParser.g (from rev 185, trunk/jsmiparser-api/src/main/antlr/SMIParser.g) =================================================================== --- tags/jsmiparser-0.5/jsmiparser-api/src/main/antlr/SMIParser.g (rev 0) +++ tags/jsmiparser-0.5/jsmiparser-api/src/main/antlr/SMIParser.g 2007-05-07 19:26:17 UTC (rev 191) @@ -0,0 +1,1038 @@ +/* + * Copyright 2004 Davy Verstappen + * Portions Copyright (C) 2003 Vivek Gupta + * Portions Copyright (C) 2005 Nigel Sheridan-Smith + * + * 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. + */ + +header { +package org.jsmiparser.phase.file.antlr; + +import org.jsmiparser.util.token.*; +import org.jsmiparser.smi.*; +import org.jsmiparser.phase.file.*; +import org.jsmiparser.util.location.Location; + +import antlr.*; +import java.lang.* ; +import java.math.*; +import java.util.*; +} + +// Creation of ASN.1 grammar for ANTLR V2.7.1 +// =================================================== +// TOKENS FOR ASN.1 LEXER DEFINITIONS +// =================================================== + +class SMILexer extends Lexer; +options { + k = 3; + exportVocab=SMI; + charVocabulary = '\3'..'\377'; + caseSensitive=true; + testLiterals = true; + codeGenMakeSwitchThreshold = 2; // Some optimizations + codeGenBitsetTestThreshold = 3; +} + +// ASN1 Tokens + +tokens { + +ABSENT_KW = "ABSENT" ; +ABSTRACT_SYNTAX_KW = "ABSTRACT-SYNTAX" ; +ALL_KW= "ALL" ; +ANY_KW = "ANY" ; +ARGUMENT_KW = "ARGUMENT" ; +APPLICATION_KW = "APPLICATION" ; +AUTOMATIC_KW = "AUTOMATIC" ; +BASED_NUM_KW = "BASEDNUM" ; +BEGIN_KW = "BEGIN" ; +BIT_KW = "BIT" ; +BMP_STRING_KW = "BMPString" ; +BOOLEAN_KW = "BOOLEAN" ; +BY_KW = "BY" ; +CHARACTER_KW = "CHARACTER" ; +CHOICE_KW = "CHOICE" ; +CLASS_KW = "CLASS" ; +COMPONENTS_KW = "COMPONENTS" ; +COMPONENT_KW = "COMPONENT" ; +CONSTRAINED_KW = "CONSTRAINED" ; +DEFAULT_KW = "DEFAULT" ; +DEFINED_KW = "DEFINED" ; +DEFINITIONS_KW = "DEFINITIONS" ; +EMBEDDED_KW = "EMBEDDED" ; +END_KW = "END" ; +ENUMERATED_KW = "ENUMERATED" ; +ERROR_KW = "ERROR" ; +ERRORS_KW = "ERRORS" ; +EXCEPT_KW = "EXCEPT" ; +EXPLICIT_KW = "EXPLICIT" ; +EXPORTS_KW = "EXPORTS" ; +EXTENSIBILITY_KW = "EXTENSIBILITY" ; +EXTERNAL_KW = "EXTERNAL" ; +FALSE_KW = "FALSE" ; +FROM_KW = "FROM" ; +GENERALIZED_TIME_KW = "GeneralizedTime" ; +GENERAL_STR_KW = "GeneralString" ; +GRAPHIC_STR_KW = "GraphicString" ; +IA5_STRING_KW = "IA5String" ; +IDENTIFIER_KW = "IDENTIFIER" ; +IMPLICIT_KW = "IMPLICIT" ; +IMPLIED_KW = "IMPLIED" ; +IMPORTS_KW = "IMPORTS" ; +INCLUDES_KW = "INCLUDES" ; +INSTANCE_KW = "INSTANCE" ; +INTEGER_KW = "INTEGER" ; +INTERSECTION_KW = "INTERSECTION" ; +ISO646STRING_KW = "ISO646String" ; +LINKED_KW = "LINKED" ; +MAX_KW = "MAX" ; +MINUS_INFINITY_KW = "MINUSINFINITY" ; +MIN_KW = "MIN" ; +NULL_KW = "NULL" ; +NUMERIC_STR_KW = "NumericString" ; +OBJECT_DESCRIPTOR_KW = "ObjectDescriptor" ; +OBJECT_KW = "OBJECT" ; +OCTET_KW = "OCTET" ; +OPERATION_KW = "OPERATION" ; +OF_KW = "OF" ; +OID_KW = "OID" ; +OPTIONAL_KW = "OPTIONAL" ; +PARAMETER_KW = "PARAMETER" ; +PDV_KW = "PDV" ; +PLUS_INFINITY_KW = "PLUSINFINITY" ; +PRESENT_KW = "PRESENT" ; +PRINTABLE_STR_KW = "PrintableString" ; +PRIVATE_KW = "PRIVATE" ; +REAL_KW = "REAL" ; +RELATIVE_KW = "RELATIVE" ; +RESULT_KW = "RESULT" ; +SEQUENCE_KW = "SEQUENCE" ; +SET_KW = "SET" ; +SIZE_KW = "SIZE" ; +STRING_KW = "STRING" ; +TAGS_KW = "TAGS" ; +TELETEX_STR_KW = "TeletexString" ; +TRUE_KW = "TRUE" ; +TYPE_IDENTIFIER_KW = "TYPE-IDENTIFIER" ; +UNION_KW = "UNION" ; +UNIQUE_KW = "UNIQUE" ; +UNIVERSAL_KW = "UNIVERSAL" ; +UNIVERSAL_STR_KW = "UniversalString" ; +UTC_TIME_KW = "UTCTime" ; +UTF8STRING_KW = "UTF8String" ; +VIDEOTEX_STR_KW = "VideotexString" ; +VISIBLE_STR_KW = "VisibleString" ; +WITH_KW = "WITH" ; +} + +// Operators + +ASSIGN_OP: "::="; +BAR: '|'; +COLON: ':'; +COMMA: ','; +COMMENT: "--"; +DOT: '.'; +DOTDOT: ".."; +ELLIPSIS: "..."; +EXCLAMATION: '!'; +INTERSECTION: '^'; +LESS: '<'; +L_BRACE: '{'; +L_BRACKET: '['; +L_PAREN: '('; +MINUS: '-'; +PLUS: '+'; +R_BRACE: '}'; +R_BRACKET: ']'; +R_PAREN: ')'; +SEMI: ';'; +SINGLE_QUOTE: "'"; +CHARB: "'B"; +CHARH: "'H"; + +// Whitespace -- ignored + +WS +: + ( ' ' + | '\t' + | '\f' + | ( options {generateAmbigWarnings=false;} + : + "\r\n" { newline(); }// DOS + | '\r' { newline(); }// Macintosh + | '\n' { newline(); }// Unix + ) + )+ +{ + $setType(Token.SKIP); +} +; + +SMIC_DIRECTIVE +: +( + "SMI" WS ("OBJECT-TYPE"|"TRAP-TYPE") +) +{ + $setType(Token.SKIP); +} +; + +INCLUDE +: + "#include" + (~('-'|'\n'|'\r'))* + (('\r')? '\n') { newline(); } +{ + $setType(Token.SKIP); +} +; + +/* +// Single-line comments +SL_COMMENT +: +(options {warnWhenFollowAmbig=false;} +: + COMMENT + ( { LA(2)!='-' }? '-' | ~('-'|'\n'|'\r'))* + ( (('\r')? '\n') { newline(); } | COMMENT) +) +{ + $setType(Token.SKIP); +} +; +*/ + +SL_COMMENT +: +(options {warnWhenFollowAmbig=false;} +: + COMMENT + ( ~('\n'|'\r'))* + ( (('\r')? '\n') { newline(); }) +) +{ + $setType(Token.SKIP); +} +; + + +NUMBER : ('0'..'9')+ ; + +// TODO in principle, underscores are not allowed in UPPER/LOWER identifiers +UPPER +options {testLiterals = false;} + : ('A'..'Z') + (options {warnWhenFollowAmbig = false;} + : ( 'a'..'z' | 'A'..'Z' | '-' | '_' | '0'..'9' ))* +; + +LOWER +options {testLiterals = false;} + : ('a'..'z') + (options {warnWhenFollowAmbig = false;} + : ( 'a'..'z' | 'A'..'Z' | '-' | '_' | '0'..'9' ))* +; + + +protected +BDIG : ('0'|'1') ; +protected +HDIG : (options {warnWhenFollowAmbig = false;} :('0'..'9') ) + | ('A'..'F') + | ('a'..'f') + ; + +// Unable to resolve a string like 010101 followed by 'H +//B_STRING : SINGLE_QUOTE ({LA(3)!='B'}? BDIG)+ BDIG SINGLE_QUOTE 'B'; +//H_STRING : SINGLE_QUOTE ({LA(3)!='H'}? HDIG)+ HDIG SINGLE_QUOTE 'H'; + +// TODO remove: ? +B_OR_H_STRING + : (options {warnWhenFollowAmbig = false;} + :(B_STRING)=>B_STRING {$setType(B_STRING);} + | H_STRING {$setType(H_STRING);}) + ; + +/* Changed by NSS 13/1/05 - upper case *or* lower case 'B' and 'H'; zero or more digits */ +protected +B_STRING : SINGLE_QUOTE (BDIG)* SINGLE_QUOTE ('B' | 'b') ; +protected +H_STRING : SINGLE_QUOTE (HDIG)* SINGLE_QUOTE ('H' | 'h') ; + + +C_STRING : '"' (options {greedy=false;} + : "\r\n" { newline(); }// DOS + | '\r' { newline(); }// Macintosh + | '\n' { newline(); }// Unix + | ~('\r' | '\n') + )* + '"' ; + + + +//************************************************************************* +//********** PARSER DEFINITIONS +//************************************************************************* + + +class SMIParser extends Parser; +options { + exportVocab=SMI; + k=3; + defaultErrorHandler=false; +} + +{ + private SmiMib m_mib; + private String m_locationPath; + private ModuleParser m_mp; + + public void init(SmiMib mib, String locationPath) { + m_mib = mib; + m_locationPath = locationPath; + } + + SmiModule beginModule(Token idToken) { + if (m_mp != null) { + throw new IllegalStateException("Module " + m_mp.getModule().getIdToken() + " is still being parsed when trying to create new module " + idToken); + } + SmiModule module = m_mib.createModule(idt(idToken)); + m_mp = new ModuleParser(module); + return module; + } + + private void endModule() { + if (m_mp == null) { + throw new IllegalStateException("No module is being parsed"); + } + m_mp = null; + } + + private Location makeLocation(Token token) { + return new Location(m_locationPath, token.getLine(), token.getColumn()); + } + + private IdToken idt(Token idToken) { + return new IdToken(makeLocation(idToken), idToken.getText()); + } + +} + + + +module_definition returns [SmiModule result = null] +: + EOF | + result=module_identifier DEFINITIONS_KW ASSIGN_OP + BEGIN_KW + module_body + END_KW { endModule(); } +; + +module_identifier returns [SmiModule result = null] +: + ( u:UPPER | l:LOWER ) +{ + // TODO error msg: only upper is correct + result = beginModule(u != null ? u : l); +} +; + +module_body +: + (exports)? + (imports)? + (assignment)* +; + +exports +: + EXPORTS_KW (symbol_list) SEMI +; + +imports +: + IMPORTS_KW (symbols_from_module)* SEMI +; + +symbols_from_module +{ + List<IdToken> idTokenList = null; + IdToken m = null; +} +: + idTokenList=symbol_list FROM_KW m=upper +{ + m_mp.addImports(m, idTokenList); +} +; + +symbol_list returns [List<IdToken> result = m_mp.makeIdTokenList()] +{ + IdToken s1 = null, s2 = null; +} +: + s1=symbol { result.add(s1); } + (COMMA s2=symbol { result.add(s2); } )* +; + +symbol returns [IdToken result = null] +: + result=upper + | result=lower + | result=macroName +; + + + +macroName returns [IdToken result = null] +: +( + ot:"OBJECT-TYPE" + | mi:"MODULE-IDENTITY" { m_mp.getModule().incV2Features(); } + | oi:"OBJECT-IDENTITY" { m_mp.getModule().incV2Features(); } + | nt:"NOTIFICATION-TYPE" { m_mp.getModule().incV2Features(); } + | tc:"TEXTUAL-CONVENTION" { m_mp.getModule().incV2Features(); } + | og:"OBJECT-GROUP" { m_mp.getModule().incV2Features(); } + | ng:"NOTIFICATION-GROUP" { m_mp.getModule().incV2Features(); } + | mc:"MODULE-COMPLIANCE" { m_mp.getModule().incV2Features(); } + | ac:"AGENT-CAPABILITIES" { m_mp.getModule().incV2Features(); } + | tt:"TRAP-TYPE"{ m_mp.getModule().incV1Features(); } +) +{ + result = m_mp.idt(ot, mi, oi, nt, tc, og, ng, mc, ac, tt); +} +; + + +assignment returns [SmiSymbol s = null] +{ + IdToken intToken = null; + SmiType type = null; + IdToken mn = null; +} +: + ( + u:UPPER ASSIGN_OP s=type_assignment[m_mp.idt(u)] + | l:LOWER s=value_assignment[m_mp.idt(l)] + | mn=macroName "MACRO" ASSIGN_OP BEGIN_KW ( ~(END_KW) )* END_KW { s = m_mp.createMacro(mn); } + ) + { + m_mp.addSymbol(s); + } +; + +type_assignment[IdToken idToken] returns [SmiType t = null] +: + t=textualconvention_macro[idToken] + | t=leaf_type[idToken] + | t=sequence_type[idToken] + | t=choice_type[idToken] +; + +// valid type for a leaf node (scalar or column) +leaf_type[IdToken idToken] returns [SmiType t = null] +: + ( L_BRACKET APPLICATION_KW n:NUMBER R_BRACKET IMPLICIT_KW )? // only used for ApplicationSyntax types + ( + t=integer_type[idToken, n] + | t=oid_type[idToken] + | t=octet_string_type[idToken, n] + | t=bits_type[idToken] + | t=defined_type[idToken] + ) +; + +integer_type[IdToken idToken, Token applicationTagToken] returns [SmiType t = null] +{ + IntKeywordToken intToken; + List<SmiNamedNumber> namedNumbers = null; + List<SmiRange> rangeConstraints = null; +} +: + intToken=integer_type_kw[idToken] + (namedNumbers=named_number_list | rangeConstraints=range_constraint)? + { + t = m_mp.createIntegerType(idToken, intToken, applicationTagToken, namedNumbers, rangeConstraints); + } +; + +// TODO should get these SmiType objects from the imports +// TODO should return SmiPrimitiveTypeIdToken here +integer_type_kw[IdToken idToken] returns [IntKeywordToken t = null] +: + i:INTEGER_KW { t = m_mp.intkt(i, SmiPrimitiveType.INTEGER, null); } +; + + +oid_type[IdToken idToken] returns [SmiType t = null] +: + OBJECT_KW IDENTIFIER_KW +{ + t = m_mp.createType(idToken, SmiConstants.OBJECT_IDENTIFIER_TYPE); +} +; + +octet_string_type[IdToken idToken, Token applicationTagToken] returns [SmiType type = null] +{ + List<SmiRange> sizeConstraints = null; +} +: + OCTET_KW STRING_KW (sizeConstraints=size_constraint)? + { + type = m_mp.createOctetStringType(idToken, applicationTagToken, sizeConstraints); + } +; + + +bits_type[IdToken idToken] returns [SmiType type = null] +{ + List<SmiNamedNumber> namedNumbers = null; +} +: + "BITS" (namedNumbers=named_number_list)? + { + type = m_mp.createBitsType(idToken, namedNumbers); + } +; + +// only used for NetworkAddress, ObjectSyntax, SimpleSyntax and ApplicationSyntax +choice_type[IdToken idToken] returns [SmiType t = null] +: + "CHOICE" L_BRACE ( ~(R_BRACE) )* R_BRACE + { + return m_mp.createChoiceType(idToken); + } +; + +defined_type[IdToken idToken] returns [SmiType type = null] +{ + List<SmiNamedNumber> namedNumbers = null; + List<SmiRange> sizeConstraints = null; + List<SmiRange> rangeConstraints = null; +} +: + (mt:UPPER DOT)? tt:UPPER + (namedNumbers=named_number_list | sizeConstraints=size_constraint | rangeConstraints=range_constraint)? + { + type = m_mp.createDefinedType(idToken, mt, tt, namedNumbers, sizeConstraints, rangeConstraints); + } +; + +sequence_type[IdToken idToken] returns [SmiType t = null] +: + SEQUENCE_KW { t = m_mp.createSequenceType(idToken); } + L_BRACE + sequence_field[t] + (COMMA sequence_field[t])* + R_BRACE +; + +sequence_field[SmiType sequenceType] +{ + SmiType fieldType = null; +} +: + l: LOWER + fieldType=leaf_type[null] +{ + m_mp.addField(sequenceType, l, fieldType); +} +; + +sequenceof_type returns [SmiType t = null] +: + SEQUENCE_KW OF_KW u:UPPER +{ + t = m_mp.createSequenceOfType(u); +} +; + +// for strings +// TODO rename to size_constraints +size_constraint returns [List<SmiRange> rc = null] +: + L_PAREN "SIZE" + rc=range_constraint + R_PAREN +; + +// for integers +// TODO rename to range_constraints +range_constraint returns [List<SmiRange> rc = null] +: + L_PAREN { rc = new ArrayList<SmiRange>(); } + range[rc] + (BAR range[rc])* + R_PAREN +; + +range[List<SmiRange> rc] +{ + org.jsmiparser.util.token.Token rv1 = null; + org.jsmiparser.util.token.Token rv2 = null; +} +: + rv1=range_value + (DOTDOT rv2=range_value)? +{ + m_mp.addRange(rc, rv1, rv2); +} +; + +range_value returns [org.jsmiparser.util.token.Token t = null] +: + t=big_integer_token + | t=binary_string_token + | t=hex_string_token +; + + +// VALUES + +value_assignment[IdToken idToken] returns [SmiValue v = null] +: + v=macro_value_assignment[idToken] + | v=oid_value_assignment[idToken] +; + +oid_value_assignment[IdToken idToken] returns [SmiOidValue v = null] +{ + OidComponent last = null; +} +: + OBJECT_KW IDENTIFIER_KW ASSIGN_OP last=oid_sequence[idToken] +{ + v = m_mp.createOidValue(idToken, last); +} +; + +macro_value_assignment[IdToken idToken] returns [SmiValue v = null] +: + v=oid_macro_value_assignment[idToken] + | int_macro_value_assignment +; + +oid_macro_value_assignment[IdToken idToken] returns [SmiOidMacro v = null] +{ + OidComponent lastOidComponent = null; +} +: + (v=objecttype_macro[idToken] + | moduleidentity_macro + | objectidentity_macro + | notificationtype_macro + | objectgroup_macro + | notificationgroup_macro + | modulecompliance_macro + | agentcapabilities_macro) + ASSIGN_OP lastOidComponent=oid_sequence[idToken] + // TODO it's probably better to move the oid stuff into the macro def +{ + if (v == null) { // TODO temporary + v = m_mp.createOidMacro(idToken); + } + v.setLastOidComponent(lastOidComponent); +} +; + +int_macro_value_assignment +: + traptype_macro ASSIGN_OP NUMBER +; + + +leaf_value returns [SmiDefaultValue result = null] +{ + BigIntegerToken bit = null; + List<IdToken> bitsIdTokenList = null; + OidComponent lastOidComponent = null; + BinaryStringToken bst = null; + HexStringToken hst = null; + QuotedStringToken qst = null; + ScopedId scopedId = null; + boolean isNullValue = false; +} +: + (bit=big_integer_token + | (bits_value) => bitsIdTokenList=bits_value + | lastOidComponent=oid_sequence[null] + | bst=binary_string_token + | hst=hex_string_token + | qst=double_quoted_string_token + | scopedId=defined_value + | NULL_KW { isNullValue = true; } + ) +{ + result = new SmiDefaultValue(m_mp.getModule(), bit, bitsIdTokenList, lastOidComponent, bst, hst, qst, scopedId, isNullValue); +} +; + + +oid_sequence [IdToken idToken] returns [OidComponent last = null] +: + L_BRACE + (last = oid_component[last])+ + R_BRACE +; + +oid_component[OidComponent parent] returns [OidComponent oc = null] +: + nt1:NUMBER { oc = m_mp.createOidComponent(parent, null, nt1); } + | (lt:LOWER (L_PAREN nt2:NUMBER R_PAREN)?) { oc = m_mp.createOidComponent(parent, lt, nt2); } +; + +bits_value returns [List<IdToken> result = new ArrayList<IdToken>()] +: + L_BRACE (l1:LOWER { result.add(idt(l1)); } (COMMA l2:LOWER { result.add(idt(l2)); })*)? R_BRACE +; + +defined_value returns [ScopedId id=null] +: + (u:UPPER DOT)? l:LOWER { id = m_mp.makeScopedId(u, l); } +; + +// TODO: it might be possible to split this up into several +// definitions, thereby syntactically guaranteeing that INDEX/AUGMENTS +// belong only to rows, UNITS and DEFVAL only for variables. And +// REFERENCE? +objecttype_macro[IdToken idToken] returns [SmiObjectType ot = null] +{ + SmiType sequenceOfType = null; + SmiType type = null; + SmiVariable var = null; + SmiRow row = null; + SmiTable table = null; + StatusAll status = null; + SmiDefaultValue defaultValue = null; +} +: + "OBJECT-TYPE" "SYNTAX" + ( type=leaf_type[null] + | sequenceOfType = sequenceof_type ) + ("UNITS" units:C_STRING)? // TODO only on SmiVariable + ( ("ACCESS" access:LOWER) + | ("MAX-ACCESS" maxAccess:LOWER) )? + "STATUS" status=status_all + ( "DESCRIPTION" desc:C_STRING )? /* TODO optional only for SMIv1 */ + ( "REFERENCE" C_STRING )? + ( ("INDEX" row=objecttype_macro_index[idToken, type] + | "AUGMENTS" row=objecttype_macro_augments[idToken, type]) )? + ( "DEFVAL" L_BRACE defaultValue=leaf_value R_BRACE )? + + { + if (sequenceOfType != null) { + ot = table = m_mp.createTable(idToken, sequenceOfType); + } else if (row != null) { + ot = row; + } else { + ot = var = m_mp.createVariable(idToken, type, units, defaultValue); + } + if (access != null) { + ot.setAccessToken(m_mp.idt(access)); + } else { + ot.setMaxAccessToken(m_mp.idt(maxAccess)); + } + ot.setStatus(status); + ot.setDescription(m_mp.getOptCStr(desc)); + } +; + +status_all returns [StatusAll status = null] +: + l:LOWER +{ + status = StatusAll.find(l.getText(), true); +} +; + +status_v2 returns [StatusV2 status = null] +: + l:LOWER +{ + status = m_mp.findStatusV2(l.getText()); +} +; + + +objecttype_macro_index[IdToken idToken, SmiType type] returns [SmiRow row = m_mp.createRow(idToken, type)] +: + L_BRACE + objecttype_macro_indextype[row] + (COMMA objecttype_macro_indextype[row])* + R_BRACE +; + +objecttype_macro_indextype[SmiRow row] +{ + boolean implied=false; + ScopedId id; +} +: + ("IMPLIED" { implied=true; } )? + id=defined_value + { row.addIndex(id, implied); } +; + +objecttype_macro_augments[IdToken idToken, SmiType type] returns [SmiRow row = m_mp.createRow(idToken, type)] +{ + ScopedId id; +} +: + L_BRACE id=defined_value R_BRACE + { + row.setAugmentsId(id); + } +; + + + + +moduleidentity_macro +: + "MODULE-IDENTITY" + "LAST-UPDATED" C_STRING + "ORGANIZATION" C_STRING + "CONTACT-INFO" C_STRING + "DESCRIPTION" C_STRING + (moduleidentity_macro_revision)* +; + +moduleidentity_macro_revision +: + "REVISION" C_STRING + "DESCRIPTION" C_STRING +; + + +objectidentity_macro +: + "OBJECT-IDENTITY" + "STATUS" status_v2 + "DESCRIPTION" C_STRING ("REFERENCE" C_STRING)? +; + + +notificationtype_macro +: + "NOTIFICATION-TYPE" + ("OBJECTS" L_BRACE LOWER (COMMA LOWER)* R_BRACE)? + "STATUS" status_v2 + "DESCRIPTION" C_STRING ("REFERENCE" C_STRING)? +; + +textualconvention_macro[IdToken idToken] returns [SmiTextualConvention tc=null] +{ + SmiType type; + StatusV2 status; +} +: + "TEXTUAL-CONVENTION" + ("DISPLAY-HINT" displayHint:C_STRING)? + "STATUS" status=status_v2 + "DESCRIPTION" description:C_STRING + ("REFERENCE" reference:C_STRING)? + "SYNTAX" type=leaf_type[null] + { + tc = m_mp.createTextualConvention(idToken, displayHint, status, description, reference, type); + } +; + + +objectgroup_macro +: + "OBJECT-GROUP" "OBJECTS" + L_BRACE + LOWER (COMMA LOWER)* + R_BRACE + "STATUS" status_v2 + "DESCRIPTION" C_STRING + ("REFERENCE" C_STRING)? +; + + +notificationgroup_macro +: + "NOTIFICATION-GROUP" "NOTIFICATIONS" + L_BRACE + LOWER (COMMA LOWER)* + R_BRACE + "STATUS" status_v2 + "DESCRIPTION" C_STRING + ("REFERENCE" C_STRING)? +; + + +modulecompliance_macro +: + "MODULE-COMPLIANCE" + "STATUS" status_v2 + "DESCRIPTION" C_STRING + ("REFERENCE" C_STRING)? + (modulecompliance_macro_module)+ +; + +modulecompliance_macro_module +: + "MODULE" (UPPER)? + ("MANDATORY-GROUPS" L_BRACE LOWER (COMMA LOWER)* R_BRACE)? + (modulecompliance_macro_compliance)* +; + +modulecompliance_macro_compliance +: + modulecompliance_macro_compliance_group + | modulecompliance_macro_compliance_object +; + +modulecompliance_macro_compliance_group +: + "GROUP" LOWER + "DESCRIPTION" C_STRING +; + +modulecompliance_macro_compliance_object +: + "OBJECT" LOWER + ("SYNTAX" leaf_type[null])? + ("WRITE-SYNTAX" leaf_type[null])? + ("MIN-ACCESS" modulecompliance_access)? + "DESCRIPTION" C_STRING +; + +modulecompliance_access +: + l:LOWER +{ + ModuleComplianceAccess.find(l.getText(), true); +} +; + + +agentcapabilities_macro +: + "AGENT-CAPABILITIES" + "PRODUCT-RELEASE" C_STRING + "STATUS" agentcapabilities_status + "DESCRIPTION" C_STRING + ("REFERENCE" C_STRING)? + (agentcapabilities_macro_module)* +; + +agentcapabilities_status +: + l:LOWER +{ + AgentCapabilitiesStatus.find(l.getText(), true); +} +; + +agentcapabilities_macro_module +: + "SUPPORTS" UPPER + "INCLUDES" L_BRACE LOWER (COMMA LOWER)* R_BRACE + (agentcapabilities_macro_variation)* +; + +agentcapabilities_macro_variation +: + "VARIATION" LOWER + ("SYNTAX" leaf_type[null])? + ("WRITE-SYNTAX" leaf_type[null])? + ("ACCESS" agentcapabilities_access)? + ("CREATION-REQUIRES" L_BRACE LOWER (COMMA LOWER)* R_BRACE)? + ("DEFVAL" L_BRACE leaf_value R_BRACE)? + "DESCRIPTION" C_STRING +; + + +agentcapabilities_access +: + l:LOWER +{ + AgentCapabilitiesAccess.find(l.getText(), true); +} +; + + +traptype_macro +: + "TRAP-TYPE" + "ENTERPRISE" LOWER + ("VARIABLES" L_BRACE LOWER (COMMA LOWER)* R_BRACE)? + ("DESCRIPTION" C_STRING)? + ("REFERENCE" C_STRING)? +; + +named_number_list returns [List<SmiNamedNumber> l = new ArrayList<SmiNamedNumber>()] +: + L_BRACE + named_number[l] + (COMMA named_number[l])* + R_BRACE +; + +named_number[List<SmiNamedNumber> l] +{ + IdToken it = null; + BigIntegerToken bit = null; +} +: + it=lower L_PAREN bit=big_integer_token R_PAREN +{ + l.add(new SmiNamedNumber(it, bit)); +} +; + +big_integer_token returns [BigIntegerToken bit = null] +: + (mt:MINUS)? nt:NUMBER { bit = m_mp.bintt(mt, nt); } +; + +binary_string_token returns [BinaryStringToken t = null] +: + bt:B_STRING { t = m_mp.bst(bt); } +; + +hex_string_token returns [HexStringToken t = null] +: + ht:H_STRING { t = m_mp.hst(ht); } +; + +double_quoted_string_token returns [QuotedStringToken t = null] +: + ct:C_STRING { t = m_mp.dqst(ct); } +; + +upper returns [IdToken result = null] +: + u:UPPER +{ + result = m_mp.idt(u); +} +; + +lower returns [IdToken result = null] +: + l:LOWER +{ + result = m_mp.idt(l); +} +; Deleted: tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java 2007-04-17 19:36:08 UTC (rev 184) +++ tags/jsmiparser-0.5/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java 2007-05-07 19:26:17 UTC (rev 191) @@ -1,129 +0,0 @@ -/* - * Copyright 2005 Davy Verstappen. - * - * 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 - * ... [truncated message content] |
From: <sta...@us...> - 2007-05-07 19:25:40
|
Revision: 190 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=190&view=rev Author: stappend Date: 2007-05-07 12:25:39 -0700 (Mon, 07 May 2007) Log Message: ----------- [maven-release-plugin] prepare release jsmiparser-0.5 Modified Paths: -------------- trunk/jsmiparser-api/pom.xml trunk/jsmiparser-util/pom.xml trunk/pom.xml Modified: trunk/jsmiparser-api/pom.xml =================================================================== --- trunk/jsmiparser-api/pom.xml 2007-05-07 19:22:44 UTC (rev 189) +++ trunk/jsmiparser-api/pom.xml 2007-05-07 19:25:39 UTC (rev 190) @@ -3,13 +3,13 @@ <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser-api</artifactId> <packaging>jar</packaging> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <name>Java SMI Parser API</name> <parent> <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <dependencies> Modified: trunk/jsmiparser-util/pom.xml =================================================================== --- trunk/jsmiparser-util/pom.xml 2007-05-07 19:22:44 UTC (rev 189) +++ trunk/jsmiparser-util/pom.xml 2007-05-07 19:25:39 UTC (rev 190) @@ -3,13 +3,13 @@ <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser-util</artifactId> <packaging>jar</packaging> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <name>Java SMI Parser Utilities</name> <parent> <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> </parent> <dependencies> Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2007-05-07 19:22:44 UTC (rev 189) +++ trunk/pom.xml 2007-05-07 19:25:39 UTC (rev 190) @@ -3,7 +3,7 @@ <groupId>org.jsmiparser</groupId> <artifactId>jsmiparser</artifactId> <packaging>pom</packaging> - <version>0.5-SNAPSHOT</version> + <version>0.5</version> <name>Java SMI Parser</name> <url>http://www.jsmiparser.org</url> <inceptionYear>2005</inceptionYear> @@ -30,9 +30,9 @@ </modules> <scm> - <connection>scm:svn:http://jsmiparser.svn.sf.net/svnroot/jsmiparser/trunk</connection> - <developerConnection>scm:svn:https://jsmiparser.svn.sf.net/svnroot/jsmiparser/trunk</developerConnection> - <url>http://jsmiparser.svn.sourceforge.net/viewvc/jsmiparser/</url> + <connection>scm:svn:http://jsmiparser.svn.sf.net/svnroot/jsmiparser/tags/jsmiparser-0.5</connection> + <developerConnection>scm:svn:https://jsmiparser.svn.sf.net/svnroot/jsmiparser/tags/jsmiparser-0.5</developerConnection> + <url>http://jsmiparser.svn.sourceforge.net/viewvc/jsmiparser/tags/jsmiparser-0.5</url> </scm> <issueManagement> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2007-05-07 19:22:45
|
Revision: 189 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=189&view=rev Author: stappend Date: 2007-05-07 12:22:44 -0700 (Mon, 07 May 2007) Log Message: ----------- removed commented code/incomplete xml exporter component Modified Paths: -------------- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java trunk/pom.xml Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java 2007-05-06 11:55:53 UTC (rev 188) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java 2007-05-07 19:22:44 UTC (rev 189) @@ -147,8 +147,4 @@ } } -// public FileParserOptions getOptions() { -// return m_options; -// } - } Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2007-05-06 11:55:53 UTC (rev 188) +++ trunk/pom.xml 2007-05-07 19:22:44 UTC (rev 189) @@ -27,7 +27,6 @@ <modules> <module>jsmiparser-util</module> <module>jsmiparser-api</module> - <module>jsmiparser-xml</module> </modules> <scm> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2007-05-06 11:55:55
|
Revision: 188 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=188&view=rev Author: stappend Date: 2007-05-06 04:55:53 -0700 (Sun, 06 May 2007) Log Message: ----------- Change the parser and phase to beans that can be configured using springframework, without actually making the library dependent on springframework. See SpringTest for an example of how to do that. Modified Paths: -------------- trunk/jsmiparser-api/pom.xml trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/check/ErrorCheckPhase.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/XRefPhase.java trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/DefaultProblemReporterFactory.java trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/ProblemReporterFactory.java Added Paths: ----------- trunk/jsmiparser-api/src/test/java/org/jsmiparser/SpringTest.java trunk/jsmiparser-api/src/test/resources/org/ trunk/jsmiparser-api/src/test/resources/org/jsmiparser/ trunk/jsmiparser-api/src/test/resources/org/jsmiparser/SpringTest.xml Modified: trunk/jsmiparser-api/pom.xml =================================================================== --- trunk/jsmiparser-api/pom.xml 2007-05-06 09:49:24 UTC (rev 187) +++ trunk/jsmiparser-api/pom.xml 2007-05-06 11:55:53 UTC (rev 188) @@ -36,10 +36,31 @@ <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> - <version>2.0.3</version> + <version>2.0.4</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context</artifactId> + <version>2.0.4</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-beans</artifactId> + <version>2.0.4</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-mock</artifactId> + <version>2.0.4</version> + <scope>test</scope> + </dependency> + </dependencies> <build> Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java 2007-05-06 09:49:24 UTC (rev 187) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java 2007-05-06 11:55:53 UTC (rev 188) @@ -32,12 +32,23 @@ public class SmiDefaultParser implements SmiParser { protected boolean m_failOnError = false; - protected ProblemEventHandler m_problemEventHandler; protected ProblemReporterFactory m_problemReporterFactory; protected FileParserPhase m_fileParserPhase; protected XRefPhase m_xRefPhase; protected ErrorCheckPhase m_errorCheckPhase; + public SmiDefaultParser() { + this(new DefaultProblemEventHandler()); + } + + public SmiDefaultParser(ProblemEventHandler problemEventHandler) { + this(new DefaultProblemReporterFactory(problemEventHandler)); + } + + public SmiDefaultParser(ProblemReporterFactory problemReporterFactory) { + m_problemReporterFactory = problemReporterFactory; + } + public SmiMib parse() throws SmiException { SmiMib mib = new SmiMib(new SmiJavaCodeNamingStrategy("org.jsmiparser.mib")); // TODO @@ -46,7 +57,7 @@ phase.process(mib); } - if (m_failOnError && m_problemEventHandler.isNotOk()) { + if (m_failOnError && getProblemReporterFactory().getProblemEventHandler().isNotOk()) { throw new SmiException(); } return mib; @@ -65,20 +76,10 @@ } public ProblemEventHandler getProblemEventHandler() { - if (m_problemEventHandler == null) { - m_problemEventHandler = new DefaultProblemEventHandler(); - } - return m_problemEventHandler; + return m_problemReporterFactory.getProblemEventHandler(); } - - public void setProblemEventHandler(ProblemEventHandler problemEventHandler) { - m_problemEventHandler = problemEventHandler; - } - + public ProblemReporterFactory getProblemReporterFactory() { - if (m_problemReporterFactory == null) { - m_problemReporterFactory = new DefaultProblemReporterFactory(getProblemEventHandler()); - } return m_problemReporterFactory; } Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/check/ErrorCheckPhase.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/check/ErrorCheckPhase.java 2007-05-06 09:49:24 UTC (rev 187) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/check/ErrorCheckPhase.java 2007-05-06 11:55:53 UTC (rev 188) @@ -1,9 +1,3 @@ -package org.jsmiparser.phase.check; - -import org.jsmiparser.phase.Phase; -import org.jsmiparser.exception.SmiException; -import org.jsmiparser.smi.SmiMib; - /* * Copyright 2006 Davy Verstappen. * @@ -19,7 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +package org.jsmiparser.phase.check; +import org.jsmiparser.phase.Phase; +import org.jsmiparser.exception.SmiException; +import org.jsmiparser.smi.SmiMib; + /** * This phase will be responsible for checking that the contents of each symbol is consistent * and correct. Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java 2007-05-06 09:49:24 UTC (rev 187) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java 2007-05-06 11:55:53 UTC (rev 188) @@ -26,6 +26,9 @@ import org.jsmiparser.smi.SmiModule; import org.jsmiparser.smi.SmiVersion; import org.jsmiparser.util.location.Location; +import org.jsmiparser.util.problem.ProblemReporterFactory; +import org.jsmiparser.util.problem.ProblemEventHandler; +import org.jsmiparser.util.problem.DefaultProblemReporterFactory; import java.io.BufferedInputStream; import java.io.IOException; @@ -48,6 +51,15 @@ m_reporter = reporter; } + public FileParserPhase(ProblemReporterFactory reporterFactory) { + m_reporter = reporterFactory.create(FileParserProblemReporter.class); + } + + public FileParserPhase(ProblemEventHandler eventHandler) { + DefaultProblemReporterFactory reporterFactory = new DefaultProblemReporterFactory(eventHandler); + m_reporter = reporterFactory.create(FileParserProblemReporter.class); + } + public FileParserProblemReporter getFileParserProblemReporter() { return m_reporter; } Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/XRefPhase.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/XRefPhase.java 2007-05-06 09:49:24 UTC (rev 187) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/xref/XRefPhase.java 2007-05-06 11:55:53 UTC (rev 188) @@ -21,15 +21,18 @@ import org.jsmiparser.smi.SmiDefaultValue; import org.jsmiparser.smi.SmiMib; import org.jsmiparser.smi.SmiModule; +import org.jsmiparser.smi.SmiOidNode; import org.jsmiparser.smi.SmiOidValue; import org.jsmiparser.smi.SmiSymbol; import org.jsmiparser.smi.SmiVariable; -import org.jsmiparser.smi.SmiOidNode; +import org.jsmiparser.util.problem.DefaultProblemReporterFactory; +import org.jsmiparser.util.problem.ProblemEventHandler; +import org.jsmiparser.util.problem.ProblemReporterFactory; import org.jsmiparser.util.token.IdToken; import java.util.Collection; +import java.util.LinkedHashMap; import java.util.Map; -import java.util.LinkedHashMap; public class XRefPhase implements Phase { @@ -42,6 +45,15 @@ m_reporter = reporter; } + public XRefPhase(ProblemReporterFactory reporterFactory) { + m_reporter = reporterFactory.create(XRefProblemReporter.class); + } + + public XRefPhase(ProblemEventHandler eventHandler) { + DefaultProblemReporterFactory reporterFactory = new DefaultProblemReporterFactory(eventHandler); + m_reporter = reporterFactory.create(XRefProblemReporter.class); + } + public Object getOptions() { return null; } Added: trunk/jsmiparser-api/src/test/java/org/jsmiparser/SpringTest.java =================================================================== --- trunk/jsmiparser-api/src/test/java/org/jsmiparser/SpringTest.java (rev 0) +++ trunk/jsmiparser-api/src/test/java/org/jsmiparser/SpringTest.java 2007-05-06 11:55:53 UTC (rev 188) @@ -0,0 +1,42 @@ +/* + * Copyright 2007 Davy Verstappen. + * + * 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.jsmiparser; + +import org.springframework.test.AbstractDependencyInjectionSpringContextTests; +import org.jsmiparser.smi.SmiMib; + +public class SpringTest extends AbstractDependencyInjectionSpringContextTests { + + private SmiMib m_mib; + + @Override + protected String getConfigPath() { + return "/org/jsmiparser/SpringTest.xml"; + } + + public SmiMib getMib() { + return m_mib; + } + + public void setMib(SmiMib mib) { + m_mib = mib; + } + + public void test() { + assertEquals(44, getMib().getScalars().size()); + assertEquals(57, getMib().getColumns().size()); + } +} Added: trunk/jsmiparser-api/src/test/resources/org/jsmiparser/SpringTest.xml =================================================================== --- trunk/jsmiparser-api/src/test/resources/org/jsmiparser/SpringTest.xml (rev 0) +++ trunk/jsmiparser-api/src/test/resources/org/jsmiparser/SpringTest.xml 2007-05-06 11:55:53 UTC (rev 188) @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> + + <bean id="urlListFactory" + class="org.jsmiparser.util.url.ClassPathURLListFactory"> + <property name="rootPath" value="libsmi-0.4.5/mibs/"/> + <property name="children"> + <list> + <value>iana/IANAifType-MIB</value> + <value>ietf/IF-MIB</value> + <value>ietf/SNMPv2-SMI</value> + <value>ietf/SNMPv2-TC</value> + <value>ietf/SNMPv2-CONF</value> + <value>ietf/SNMPv2-MIB</value> + </list> + </property> + </bean> + + <bean id="problemEventHandler" + class="org.jsmiparser.util.problem.DefaultProblemEventHandler"/> + + <bean id="parser" + class="org.jsmiparser.parser.SmiDefaultParser"> + <constructor-arg ref="problemEventHandler"/> + <property name="fileParserPhase"> + <bean class="org.jsmiparser.phase.file.FileParserPhase"> + <constructor-arg ref="problemEventHandler"/> + <property name="inputUrls"> + <bean factory-bean="urlListFactory" + factory-method="create"/> + </property> + </bean> + </property> + </bean> + + <bean id="mib" + factory-bean="parser" + factory-method="parse"/> + +</beans> \ No newline at end of file Modified: trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/DefaultProblemReporterFactory.java =================================================================== --- trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/DefaultProblemReporterFactory.java 2007-05-06 09:49:24 UTC (rev 187) +++ trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/DefaultProblemReporterFactory.java 2007-05-06 11:55:53 UTC (rev 188) @@ -32,6 +32,14 @@ m_problemEventHandler = ph; } + public ClassLoader getClassLoader() { + return m_classLoader; + } + + public ProblemEventHandler getProblemEventHandler() { + return m_problemEventHandler; + } + @SuppressWarnings("unchecked") public <T> T create(Class<T> cl) { Class[] classArray = {cl}; Modified: trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/ProblemReporterFactory.java =================================================================== --- trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/ProblemReporterFactory.java 2007-05-06 09:49:24 UTC (rev 187) +++ trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/problem/ProblemReporterFactory.java 2007-05-06 11:55:53 UTC (rev 188) @@ -18,4 +18,6 @@ public interface ProblemReporterFactory { <T> T create(Class<T> cl); + + ProblemEventHandler getProblemEventHandler(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sta...@us...> - 2007-05-06 09:49:29
|
Revision: 187 http://jsmiparser.svn.sourceforge.net/jsmiparser/?rev=187&view=rev Author: stappend Date: 2007-05-06 02:49:24 -0700 (Sun, 06 May 2007) Log Message: ----------- Removed the FileParserOptions class, and replaced it with a simple List<URL> in the FileParserPhase. Added several utility classes (ClassPathURLListFactory, FileURLListFactory) to easily create such a list. Modified Paths: -------------- trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/Phase.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserProblemReporter.java trunk/jsmiparser-api/src/test/java/org/jsmiparser/AbstractMibTestCase.java trunk/jsmiparser-api/src/test/java/org/jsmiparser/parser/CyclicDepsTest.java trunk/jsmiparser-api/src/test/java/org/jsmiparser/parser/SmiDefaultParserTest.java Added Paths: ----------- trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/ trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/AbstractURLListFactory.java trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/ClassPathURLListFactory.java trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/CompositeURLListFactory.java trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/FileURLListFactory.java trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/URLListFactory.java Removed Paths: ------------- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserOptions.java Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java 2007-05-01 11:03:10 UTC (rev 186) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/parser/SmiDefaultParser.java 2007-05-06 09:49:24 UTC (rev 187) @@ -34,9 +34,9 @@ protected boolean m_failOnError = false; protected ProblemEventHandler m_problemEventHandler; protected ProblemReporterFactory m_problemReporterFactory; - protected Phase m_fileParserPhase; - protected Phase m_xRefPhase; - protected Phase m_errorCheckPhase; + protected FileParserPhase m_fileParserPhase; + protected XRefPhase m_xRefPhase; + protected ErrorCheckPhase m_errorCheckPhase; public SmiMib parse() throws SmiException { SmiMib mib = new SmiMib(new SmiJavaCodeNamingStrategy("org.jsmiparser.mib")); // TODO @@ -52,15 +52,15 @@ return mib; } - protected Phase createFileParserPhase() { + protected FileParserPhase createFileParserPhase() { return new FileParserPhase(getProblemReporterFactory().create(FileParserProblemReporter.class)); } - protected Phase createXRefPhase() { + protected XRefPhase createXRefPhase() { return new XRefPhase(getProblemReporterFactory().create(XRefProblemReporter.class)); } - private Phase createErrorCheckPhase() { + private ErrorCheckPhase createErrorCheckPhase() { return new ErrorCheckPhase(); } @@ -86,36 +86,36 @@ m_problemReporterFactory = problemReporterFactory; } - public Phase getFileParserPhase() { + public FileParserPhase getFileParserPhase() { if (m_fileParserPhase == null) { m_fileParserPhase = createFileParserPhase(); } return m_fileParserPhase; } - public void setFileParserPhase(Phase fileParserPhase) { + public void setFileParserPhase(FileParserPhase fileParserPhase) { m_fileParserPhase = fileParserPhase; } - public Phase getXRefPhase() { + public XRefPhase getXRefPhase() { if (m_xRefPhase == null) { m_xRefPhase = createXRefPhase(); } return m_xRefPhase; } - public void setXRefPhase(Phase xrefPhase) { + public void setXRefPhase(XRefPhase xrefPhase) { m_xRefPhase = xrefPhase; } - public Phase getErrorCheckPhase() { + public ErrorCheckPhase getErrorCheckPhase() { if (m_errorCheckPhase == null) { m_errorCheckPhase = createErrorCheckPhase(); } return m_errorCheckPhase; } - public void setErrorCheckPhase(Phase errorCheckPhase) { + public void setErrorCheckPhase(ErrorCheckPhase errorCheckPhase) { m_errorCheckPhase = errorCheckPhase; } Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/Phase.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/Phase.java 2007-05-01 11:03:10 UTC (rev 186) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/Phase.java 2007-05-06 09:49:24 UTC (rev 187) @@ -20,7 +20,6 @@ public interface Phase { - Object getOptions(); - SmiMib process(SmiMib mib) throws SmiException; + } Deleted: trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserOptions.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserOptions.java 2007-05-01 11:03:10 UTC (rev 186) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserOptions.java 2007-05-06 09:49:24 UTC (rev 187) @@ -1,205 +0,0 @@ -/* - * Copyright 2005 Davy Verstappen. - * - * 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.jsmiparser.phase.file; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.LinkedHashSet; -import java.util.Properties; -import java.util.Set; - -import org.apache.log4j.Logger; -import org.jsmiparser.util.TextUtil; - -public class FileParserOptions { - - private static final Logger m_log = Logger.getLogger(FileParserOptions.class); - - private Set<File> m_usedDirSet = new LinkedHashSet<File>(); - private Set<File> m_inputDirSet = new LinkedHashSet<File>(); - - private Set<String> m_usedResourceSet = new LinkedHashSet<String>(); - private Set<String> m_inputResourceSet = new LinkedHashSet<String>(); - - private Set<String> m_extensions = new LinkedHashSet<String>(); - - public FileParserOptions() { - m_extensions.add(".mib"); - m_extensions.add(".smi"); - m_extensions.add(".asn"); - } - - public Set<File> getUsedDirSet() { - return m_usedDirSet; - } - - public void setUsedDirSet(Set<File> usedDirSet) { - m_usedDirSet = usedDirSet; - } - - public Set<File> getInputDirSet() { - return m_inputDirSet; - } - - public void setInputDirSet(Set<File> inputDirSet) { - m_inputDirSet = inputDirSet; - } - - public Set<String> getUsedResourceSet() { - return m_usedResourceSet; - } - - public void setUsedResourceSet(Set<String> usedFileSet) { - m_usedResourceSet = usedFileSet; - } - - public Set<String> getInputResourceSet() { - return m_inputResourceSet; - } - - public void setInputResourceSet(Set<String> inputResourceSet) { - m_inputResourceSet = inputResourceSet; - } - - public void addFile(File file) { - m_inputResourceSet.add(file.getAbsolutePath()); - } - - public void addResource(String path) { - m_inputResourceSet.add(path); - } - - public Set<String> getExtensions() { - return m_extensions; - } - - public void setExtensions(Set<String> extensions) { - m_extensions = extensions; - } - - public File findFile(final String moduleName) { - boolean itf = false; - if ("ITF-MIB".equals(moduleName)) { - itf = true; - } - - File result = findModuleFile(moduleName, null); - if (result != null) { - return result; - } - - for (String ext : m_extensions) { - result = findModuleFile(moduleName, ext); - if (result != null) { - return result; - } - } - - if (!moduleName.equals(moduleName.toLowerCase())) { - result = findFile(moduleName.toLowerCase()); - if (result != null) { - return result; - } - } - - if (moduleName.contains("-")) { - result = findFile(moduleName.replace('-', '_')); - if (result != null) { - return result; - } - - result = findFile(TextUtil.deleteChar(moduleName, '-')); - if (result != null) { - return result; - } - } - - if (moduleName.endsWith("-MIB") || moduleName.endsWith("-SMI")) { - result = findFile(moduleName.substring(0, moduleName.length() - 4)); - if (result != null) { - return result; - } - } - - if (itf) { - m_log.debug("trying itf"); - } - Properties props = getModuleFileNameProperties(); - if (props != null) { - if (itf) { - m_log.debug("found properties for itf"); - } - String fileName = (String) props.get(moduleName); - if (itf) { - m_log.debug("itf fileName: " + fileName); - } - if (fileName != null) { - result = doFindFile(fileName); - if (result != null) { - return result; - } - } else { - m_log.debug(moduleName + " not found in properties file"); - } - } - - return result; - } - - private Properties getModuleFileNameProperties() { - try { - String fileName = System.getenv("MIBS_MODULE_FILE"); - if (fileName != null) { - Properties p = new Properties(); - InputStream is = new BufferedInputStream(new FileInputStream(fileName)); - p.load(is); - //m_log.debug("properties file size: " + p.size()); - is.close(); - return p; - } else { - m_log.debug("MIBS_MODULE_FILE not set"); - } - return null; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - private File findModuleFile(final String moduleName, final String extension) { - String fileName = moduleName; - if (extension != null) { - fileName += extension; - } - - return doFindFile(fileName); - } - - private File doFindFile(String fileName) { - for (File dir : m_usedDirSet) { - File file = new File(dir, fileName); - if (file.exists()) { - return file; - } else { - //m_log.debug(file.getPath() + " does not exist."); - } - } - - return null; - } -} Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java 2007-05-01 11:03:10 UTC (rev 186) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserPhase.java 2007-05-06 09:49:24 UTC (rev 187) @@ -18,8 +18,8 @@ import antlr.RecognitionException; import antlr.TokenStreamException; import org.apache.log4j.Logger; +import org.jsmiparser.exception.SmiException; import org.jsmiparser.phase.Phase; -import org.jsmiparser.exception.SmiException; import org.jsmiparser.phase.file.antlr.SMILexer; import org.jsmiparser.phase.file.antlr.SMIParser; import org.jsmiparser.smi.SmiMib; @@ -28,11 +28,10 @@ import org.jsmiparser.util.location.Location; import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.net.URL; +import java.util.List; import java.util.Set; // TODO allow any URL's @@ -42,8 +41,9 @@ private static final Logger m_log = Logger.getLogger(FileParserPhase.class); private FileParserProblemReporter m_reporter; - private FileParserOptions m_options = new FileParserOptions(); + private List<URL> m_inputUrls; + public FileParserPhase(FileParserProblemReporter reporter) { m_reporter = reporter; } @@ -52,9 +52,17 @@ return m_reporter; } + public List<URL> getInputUrls() { + return m_inputUrls; + } + + public void setInputUrls(List<URL> inputUrls) { + m_inputUrls = inputUrls; + } + public SmiMib process(SmiMib mib) throws SmiException { - for (String resourceLocation : m_options.getInputResourceSet()) { - parse(mib, resourceLocation); + for (URL url : getInputUrls()) { + parse(mib, url, determineResourceLocation(url)); } if (m_log.isDebugEnabled()) { @@ -64,24 +72,19 @@ return mib; } - public void parse(SmiMib mib, String resourceLocation) { + private String determineResourceLocation(URL url) { + if ("file".equals(url.getProtocol())) { + return "file://" + url.getPath(); + } + return url.toString(); + } + + public void parse(SmiMib mib, URL url, String resourceLocation) { InputStream is = null; try { - m_log.debug("Parsing :" + resourceLocation); - // ResourceLocation could be either a classpath location or a file location - // First try as a classpath location - InputStream resourceStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resourceLocation); - if (resourceStream == null) { - // Attempt to interpret as a File - File inputFile = null; - try { - inputFile = new File(resourceLocation); - resourceStream = new FileInputStream(inputFile); - } catch (FileNotFoundException e) { - m_reporter.reportFileNotFound(inputFile); - } - } - is = new BufferedInputStream(resourceStream); + m_log.debug("Parsing :" + url); + is = url.openStream(); + is = new BufferedInputStream(is); SMILexer lexer = new SMILexer(is); SMIParser parser = new SMIParser(lexer); @@ -98,6 +101,9 @@ } catch (RecognitionException e) { m_log.debug(e.getMessage(), e); m_reporter.reportParseError(new Location(resourceLocation, e.getLine(), e.getColumn()), e.getMessage()); + } catch (IOException e) { + m_log.debug(e.getMessage(), e); + m_reporter.reportIoException(new Location(resourceLocation, 0, 0), e.getMessage()); } finally { m_log.debug("Finished parsing :" + resourceLocation); if (is != null) { @@ -129,8 +135,8 @@ } } - public FileParserOptions getOptions() { - return m_options; - } +// public FileParserOptions getOptions() { +// return m_options; +// } } Modified: trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserProblemReporter.java =================================================================== --- trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserProblemReporter.java 2007-05-01 11:03:10 UTC (rev 186) +++ trunk/jsmiparser-api/src/main/java/org/jsmiparser/phase/file/FileParserProblemReporter.java 2007-05-06 09:49:24 UTC (rev 187) @@ -30,5 +30,8 @@ @ProblemMethod(message = "File not found: %s") void reportFileNotFound(File file); + + @ProblemMethod(message="IO error: %s") + void reportIoException(Location location, String message); } Modified: trunk/jsmiparser-api/src/test/java/org/jsmiparser/AbstractMibTestCase.java =================================================================== --- trunk/jsmiparser-api/src/test/java/org/jsmiparser/AbstractMibTestCase.java 2007-05-01 11:03:10 UTC (rev 186) +++ trunk/jsmiparser-api/src/test/java/org/jsmiparser/AbstractMibTestCase.java 2007-05-06 09:49:24 UTC (rev 187) @@ -16,25 +16,25 @@ package org.jsmiparser; import junit.framework.TestCase; +import org.apache.log4j.Logger; import org.jsmiparser.parser.SmiDefaultParser; import org.jsmiparser.parser.SmiParser; -import org.jsmiparser.phase.file.FileParserOptions; import org.jsmiparser.smi.SmiConstants; import org.jsmiparser.smi.SmiMib; import org.jsmiparser.smi.SmiModule; import org.jsmiparser.smi.SmiObjectType; +import org.jsmiparser.smi.SmiOidNode; import org.jsmiparser.smi.SmiOidValue; import org.jsmiparser.smi.SmiPrimitiveType; import org.jsmiparser.smi.SmiSymbol; import org.jsmiparser.smi.SmiType; import org.jsmiparser.smi.SmiVersion; -import org.jsmiparser.smi.SmiOidNode; -import org.apache.log4j.Logger; +import org.jsmiparser.util.url.AbstractURLListFactory; +import org.jsmiparser.util.url.ClassPathURLListFactory; import org.springframework.util.StopWatch; -import java.io.File; -import java.net.URISyntaxException; import java.net.URL; +import java.util.List; import java.util.Set; public abstract class AbstractMibTestCase extends TestCase { @@ -71,7 +71,7 @@ SmiMib mib = parser.parse(); stopWatch.stop(); m_log.info("Parsing time: " + stopWatch.getTotalTimeSeconds() + " s"); - + m_mib.set(mib); m_testClass.set(getClass()); } catch (Exception e) { @@ -82,36 +82,25 @@ } protected SmiParser createParser() throws Exception { - m_parser = new SmiDefaultParser(); - FileParserOptions options = (FileParserOptions) m_parser.getFileParserPhase().getOptions(); + ClassPathURLListFactory urlListFactory = new ClassPathURLListFactory("libsmi-0.4.5/mibs/ietf/"); - URL mibsURL = getClass().getClassLoader().getResource("libsmi-0.4.5/mibs/ietf"); - File mibsDir = null; - try { - mibsDir = new File(mibsURL.toURI()); - } catch (URISyntaxException e) { - fail(e.getMessage()); - } - if (m_version == null || m_version == SmiVersion.V1) { - options.addFile(new File(mibsDir, "RFC1155-SMI")); + urlListFactory.add("RFC1155-SMI"); } if (m_version == null || m_version == SmiVersion.V2) { - options.addFile(new File(mibsDir, "SNMPv2-SMI")); - options.addFile(new File(mibsDir, "SNMPv2-TC")); - options.addFile(new File(mibsDir, "SNMPv2-CONF")); - options.addFile(new File(mibsDir, "SNMPv2-MIB")); + urlListFactory.add("SNMPv2-SMI"); + urlListFactory.add("SNMPv2-TC"); + urlListFactory.add("SNMPv2-CONF"); + urlListFactory.add("SNMPv2-MIB"); } + List<URL> urls = urlListFactory.create(); for (String resource : getResources()) { - URL mibURL = getClass().getClassLoader().getResource(resource); - try { - File mibFile = new File(mibURL.toURI()); - options.addFile(mibFile); - } catch (URISyntaxException e) { - fail(e.getMessage()); - } + urls.add(getClass().getClassLoader().getResource(resource)); } + + m_parser = new SmiDefaultParser(); + m_parser.getFileParserPhase().setInputUrls(urls); return m_parser; } Modified: trunk/jsmiparser-api/src/test/java/org/jsmiparser/parser/CyclicDepsTest.java =================================================================== --- trunk/jsmiparser-api/src/test/java/org/jsmiparser/parser/CyclicDepsTest.java 2007-05-01 11:03:10 UTC (rev 186) +++ trunk/jsmiparser-api/src/test/java/org/jsmiparser/parser/CyclicDepsTest.java 2007-05-06 09:49:24 UTC (rev 187) @@ -1,14 +1,3 @@ -package org.jsmiparser.parser; - -import org.jsmiparser.phase.file.FileParserOptions; -import org.jsmiparser.exception.SmiException; - -import java.net.URISyntaxException; -import java.net.URL; -import java.io.File; - -import junit.framework.TestCase; - /* * Copyright 2007 Davy Verstappen. * @@ -24,15 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +package org.jsmiparser.parser; + +import junit.framework.TestCase; +import org.jsmiparser.exception.SmiException; +import org.jsmiparser.util.url.ClassPathURLListFactory; + +import java.net.URISyntaxException; + + public class CyclicDepsTest extends TestCase { public void testCyclicDeps() throws URISyntaxException { - URL mibURL = getClass().getClassLoader().getResource("cyclic_deps.txt"); - File mibFile = new File(mibURL.toURI()); + ClassPathURLListFactory urlListFactory = new ClassPathURLListFactory(); + urlListFactory.add("cyclic_deps.txt"); SmiDefaultParser parser = new SmiDefaultParser(); - FileParserOptions options = (FileParserOptions) parser.getFileParserPhase().getOptions(); - options.addFile(mibFile); + parser.getFileParserPhase().setInputUrls(urlListFactory.create()); try { parser.parse(); Modified: trunk/jsmiparser-api/src/test/java/org/jsmiparser/parser/SmiDefaultParserTest.java =================================================================== --- trunk/jsmiparser-api/src/test/java/org/jsmiparser/parser/SmiDefaultParserTest.java 2007-05-01 11:03:10 UTC (rev 186) +++ trunk/jsmiparser-api/src/test/java/org/jsmiparser/parser/SmiDefaultParserTest.java 2007-05-06 09:49:24 UTC (rev 187) @@ -16,8 +16,6 @@ package org.jsmiparser.parser; import org.jsmiparser.AbstractMibTestCase; -import org.jsmiparser.util.token.HexStringToken; -import org.jsmiparser.phase.file.FileParserOptions; import org.jsmiparser.smi.SmiConstants; import org.jsmiparser.smi.SmiIndex; import org.jsmiparser.smi.SmiMib; @@ -26,6 +24,7 @@ import org.jsmiparser.smi.SmiOidValue; import org.jsmiparser.smi.SmiPrimitiveType; import org.jsmiparser.smi.SmiProtocolType; +import org.jsmiparser.smi.SmiRange; import org.jsmiparser.smi.SmiReferencedType; import org.jsmiparser.smi.SmiRow; import org.jsmiparser.smi.SmiSymbol; @@ -34,14 +33,16 @@ import org.jsmiparser.smi.SmiType; import org.jsmiparser.smi.SmiVarBindField; import org.jsmiparser.smi.SmiVariable; -import org.jsmiparser.smi.SmiRange; +import org.jsmiparser.util.token.HexStringToken; +import org.jsmiparser.util.url.FileURLListFactory; import java.io.File; +import java.math.BigInteger; import java.net.URISyntaxException; import java.net.URL; +import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.math.BigInteger; public class SmiDefaultParserTest extends AbstractMibTestCase { @@ -55,8 +56,8 @@ File mibsDir = new File(mibsURL.toURI()); SmiDefaultParser parser = new SmiDefaultParser(); - FileParserOptions options = (FileParserOptions) parser.getFileParserPhase().getOptions(); - initFileParserOptions(options, mibsDir, "iana", "ietf", "site", "tubs"); + List<URL> inputUrls = initFileParserOptions(mibsDir, "iana", "ietf", "site", "tubs"); + parser.getFileParserPhase().setInputUrls(inputUrls); return parser; } @@ -180,10 +181,10 @@ checkType(type.getBaseType()); } else if (type.getFields() == null && !(type instanceof SmiProtocolType)) { assertTrue(type.getId(), - type == SmiConstants.BITS_TYPE - || type == SmiConstants.INTEGER_TYPE - || type == SmiConstants.OBJECT_IDENTIFIER_TYPE - || type == SmiConstants.OCTET_STRING_TYPE); + type == SmiConstants.BITS_TYPE + || type == SmiConstants.INTEGER_TYPE + || type == SmiConstants.OBJECT_IDENTIFIER_TYPE + || type == SmiConstants.OCTET_STRING_TYPE); } } @@ -357,13 +358,15 @@ } - private void initFileParserOptions(FileParserOptions options, File mibsDir, String... subDirNames) { + private List<URL> initFileParserOptions(File mibsDir, String... subDirNames) throws Exception { + List<URL> result = new ArrayList<URL>(); + for (String subDirName : subDirNames) { File dir = new File(mibsDir, subDirName); assertTrue(dir.toString(), dir.exists()); assertTrue(dir.toString(), dir.isDirectory()); - options.getUsedDirSet().add(dir); + FileURLListFactory urlListFactory = new FileURLListFactory(dir); File[] files = dir.listFiles(); for (File file : files) { if (file.isFile() @@ -374,10 +377,12 @@ && !file.getName().endsWith("~") //&& !v1mibs.contains(file.getName()) && !file.getName().endsWith("-orig")) { // TODO parsing -orig should give more errors! - options.addFile(file); + urlListFactory.add(file.getName()); } } + result.addAll(urlListFactory.create()); } + return result; } Added: trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/AbstractURLListFactory.java =================================================================== --- trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/AbstractURLListFactory.java (rev 0) +++ trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/AbstractURLListFactory.java 2007-05-06 09:49:24 UTC (rev 187) @@ -0,0 +1,61 @@ +/* + * Copyright 2007 Davy Verstappen. + * + * 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.jsmiparser.util.url; + +import java.net.URL; +import java.util.ArrayList; +import java.util.List; + + +public abstract class AbstractURLListFactory implements URLListFactory { + + protected String m_rootPath; + protected List<String> m_children; + + public AbstractURLListFactory() { + this(""); + } + + public AbstractURLListFactory(String rootPath) { + this(rootPath, new ArrayList<String>()); + } + + public AbstractURLListFactory(String rootPath, List<String> children) { + m_rootPath = rootPath; + m_children = children; + } + + public String getRootPath() { + return m_rootPath; + } + + public void setRootPath(String rootPath) { + m_rootPath = rootPath; + } + + public List<String> getChildren() { + return m_children; + } + + public void setChildren(List<String> children) { + m_children = children; + } + + public void add(String child) { + getChildren().add(child); + } + +} Added: trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/ClassPathURLListFactory.java =================================================================== --- trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/ClassPathURLListFactory.java (rev 0) +++ trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/ClassPathURLListFactory.java 2007-05-06 09:49:24 UTC (rev 187) @@ -0,0 +1,61 @@ +/* + * Copyright 2007 Davy Verstappen. + * + * 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.jsmiparser.util.url; + +import java.net.URL; +import java.util.List; +import java.util.ArrayList; + +public class ClassPathURLListFactory extends AbstractURLListFactory { + protected ClassLoader m_classLoader; + + public ClassPathURLListFactory() { + super(); + } + + public ClassPathURLListFactory(String rootPath) { + super(rootPath); + } + + public ClassPathURLListFactory(String rootPath, List<String> children) { + super(rootPath, children); + } + + + public ClassLoader getClassLoader() { + if (m_classLoader != null) { + return m_classLoader; + } + return Thread.currentThread().getContextClassLoader(); + } + + public void setClassLoader(ClassLoader classLoader) { + m_classLoader = classLoader; + } + + public List<URL> create() { + List<URL> result = new ArrayList<URL>(); + for (String child : m_children) { + String path = getRootPath() + child; // explicitly no + URL url = getClassLoader().getResource(path); + if (url == null) { + throw new IllegalStateException("Classpath resource doesn't exist (perhaps you are missing a slash or have one too much at the beginning?): " + path); + } + result.add(url); + } + return result; + } +} Added: trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/CompositeURLListFactory.java =================================================================== --- trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/CompositeURLListFactory.java (rev 0) +++ trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/CompositeURLListFactory.java 2007-05-06 09:49:24 UTC (rev 187) @@ -0,0 +1,54 @@ +/* + * Copyright 2007 Davy Verstappen. + * + * 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.jsmiparser.util.url; + +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class CompositeURLListFactory implements URLListFactory { + + private List<URLListFactory> m_children; + + public CompositeURLListFactory() { + this(new ArrayList<URLListFactory>()); + } + + public CompositeURLListFactory(List<URLListFactory> children) { + m_children = children; + } + + public CompositeURLListFactory(URLListFactory... urlListFactories) { + this(Arrays.asList(urlListFactories)); + } + + public List<URLListFactory> getChildren() { + return m_children; + } + + public void setChildren(List<URLListFactory> children) { + m_children = children; + } + + public List<URL> create() throws Exception { + List<URL> result = new ArrayList<URL>(); + for (URLListFactory child : m_children) { + result.addAll(child.create()); + } + return result; + } +} Added: trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/FileURLListFactory.java =================================================================== --- trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/FileURLListFactory.java (rev 0) +++ trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/FileURLListFactory.java 2007-05-06 09:49:24 UTC (rev 187) @@ -0,0 +1,58 @@ +/* + * Copyright 2007 Davy Verstappen. + * + * 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.jsmiparser.util.url; + +import java.util.List; +import java.util.ArrayList; +import java.net.URL; +import java.io.File; + +public class FileURLListFactory extends AbstractURLListFactory { + + public FileURLListFactory() { + super(); + } + + public FileURLListFactory(File rootDir) { + this(rootDir.getAbsolutePath()); + } + + public FileURLListFactory(String rootPath) { + super(rootPath); + } + + public FileURLListFactory(File rootDir, List<String> children) { + super(rootDir.getAbsolutePath(), children); + } + + public FileURLListFactory(String rootPath, List<String> children) { + super(rootPath, children); + } + + + public List<URL> create() throws Exception { + List<URL> result = new ArrayList<URL>(); + File dir = new File(m_rootPath); + for (String child : m_children) { + File file = new File(dir, child); + if (!file.exists()) { + throw new IllegalStateException("File doesn't exist: " + file); + } + result.add(file.toURL()); + } + return result; + } +} Added: trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/URLListFactory.java =================================================================== --- trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/URLListFactory.java (rev 0) +++ trunk/jsmiparser-util/src/main/java/org/jsmiparser/util/url/URLListFactory.java 2007-05-06 09:49:24 UTC (rev 187) @@ -0,0 +1,31 @@ +/* + * Copyright 2007 Davy Verstappen. + * + * 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.jsmiparser.util.url; + +import java.net.URL; +import java.util.List; + +/** + * Utility interface to create a List<URL> for input to the FileParserPhase of the jsmiparser. + */ +public interface URLListFactory { + + /** + * @return The URL List. + */ + List<URL> create() throws Exception; + +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |