[Bug 416143] mod file format uses [type]

This commit is contained in:
Jesse McConnell 2013-08-29 16:12:46 -05:00
parent 8a1f12ae81
commit 6e3094e1b0
31 changed files with 221 additions and 135 deletions

View File

@ -18,8 +18,10 @@
package org.eclipse.jetty.start;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.text.CollationKey;
import java.text.Collator;
@ -30,12 +32,15 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.omg.CORBA.INITIALIZE;
/**
* Represents a Module metadata, as defined in Jetty.
*/
public class Module extends TextFile
public class Module // extends TextFile
{
public static class NameComparator implements Comparator<Module>
{
@ -50,7 +55,7 @@ public class Module extends TextFile
return k1.compareTo(k2);
}
}
public static class DepthComparator implements Comparator<Module>
{
private Collator collator = Collator.getInstance();
@ -71,6 +76,8 @@ public class Module extends TextFile
}
}
/** The file of the module */
private File file;
/** The name of this Module */
private String name;
/** The depth of the module in the tree */
@ -90,8 +97,7 @@ public class Module extends TextFile
/** List of library options for this Module */
private List<String> libs;
/** List of downloads for this Module */
private List<String> downloads;
private List<String> downloads;
/** Is this Module enabled via start.jar command line, start.ini, or start.d/*.ini ? */
private boolean enabled = false;
@ -100,11 +106,14 @@ public class Module extends TextFile
public Module(File file) throws FileNotFoundException, IOException
{
super(file);
this.file = file;
String name = file.getName();
// Strip .ini
name = Pattern.compile(".mod$",Pattern.CASE_INSENSITIVE).matcher(name).replaceFirst("");
init();
process();
}
public void addChildEdge(Module child)
@ -201,12 +210,12 @@ public class Module extends TextFile
{
return initialise;
}
public List<String> getDownloads()
{
return downloads;
}
@Override
public int hashCode()
{
@ -216,22 +225,21 @@ public class Module extends TextFile
return result;
}
@Override
public void init()
{
String name = getFile().getName();
String name = file.getName();
// Strip .ini
this.name = Pattern.compile(".mod$",Pattern.CASE_INSENSITIVE).matcher(name).replaceFirst("");
parentNames=new HashSet<>();
optionalParentNames=new HashSet<>();
parentEdges=new HashSet<>();
childEdges=new HashSet<>();
xmls=new ArrayList<>();
initialise=new ArrayList<>();
libs=new ArrayList<>();
downloads=new ArrayList<>();
parentNames = new HashSet<>();
optionalParentNames = new HashSet<>();
parentEdges = new HashSet<>();
childEdges = new HashSet<>();
xmls = new ArrayList<>();
initialise = new ArrayList<>();
libs = new ArrayList<>();
downloads = new ArrayList<>();
}
public boolean isEnabled()
@ -239,61 +247,70 @@ public class Module extends TextFile
return enabled;
}
@Override
public void process(String line)
public void process() throws FileNotFoundException, IOException
{
boolean handled = false;
Pattern section = Pattern.compile("\\s*\\[([^]]*)\\]\\s*");
if (line == null)
if (!FS.canReadFile(file))
{
}
// has assignment
int idx = line.indexOf('=');
if (idx >= 0)
{
String key = line.substring(0,idx);
String value = line.substring(idx + 1);
switch (key.toUpperCase(Locale.ENGLISH))
{
case "DEPEND":
parentNames.add(value);
handled = true;
break;
case "LIB":
libs.add(value);
handled = true;
break;
case "OPTIONAL":
optionalParentNames.add(value);
handled = true;
break;
case "DOWNLOAD":
downloads.add(value);
handled = true;
break;
case "INI":
initialise.add(value);
handled = true;
break;
}
}
if (handled)
{
return; // no further processing of line needed
}
// Is it an XML line?
if (FS.isXml(line))
{
xmls.add(line);
StartLog.debug("Skipping read of missing file: %s",file.getAbsolutePath());
return;
}
throw new IllegalArgumentException("Unrecognized Module Metadata line [" + line + "] in Module file [" + getFile() + "]");
try (FileReader reader = new FileReader(file))
{
try (BufferedReader buf = new BufferedReader(reader))
{
String line;
String sectionType = "";
while ((line = buf.readLine()) != null)
{
line = line.trim();
Matcher sectionMatcher = section.matcher(line);
if (sectionMatcher.matches())
{
sectionType = sectionMatcher.group(1).trim().toUpperCase();
}
else
{
System.out.println("Processing: " + line);
// blank lines and comments are valid for initialize section
if (line.length() == 0 || line.startsWith("#"))
{
if ("INI".equals(sectionType))
{
initialise.add(line);
}
}
else
{
switch (sectionType)
{
case "DEPEND":
parentNames.add(line);
break;
case "LIB":
libs.add(line);
break;
case "XML":
xmls.add(line);
break;
case "OPTIONAL":
optionalParentNames.add(line);
break;
case "DOWNLOAD":
downloads.add(line);
break;
case "INI":
initialise.add(line);
break;
}
}
}
}
}
}
}
public void setDepth(int depth)
@ -310,17 +327,17 @@ public class Module extends TextFile
{
this.sources.addAll(sources);
}
public void clearSources()
{
this.sources.clear();
}
public Set<String> getSources()
{
return Collections.unmodifiableSet(sources);
}
@Override
public String toString()
{
@ -333,5 +350,4 @@ public class Module extends TextFile
str.append(']');
return str.toString();
}
}

View File

@ -1 +1,2 @@
LIB=lib/example*with spaces.jar
[lib]
lib/example*with spaces.jar

View File

@ -1,8 +1,11 @@
DEPEND=deploy
DEPEND=jndi
DEPEND=plus
[depend]
deploy
jndi
plus
LIB=lib/db/*.jar
[lib]
lib/db/*.jar
[xml]
etc/jetty-db.xml

View File

@ -2,13 +2,16 @@
# Jetty Annotation Scanning Module
#
[depend]
# Annotations needs plus, and jndi features
DEPEND=plus
plus
[lib]
# Annotations needs jetty annotation jars
LIB=lib/jetty-annotations-${jetty.version}.jar
lib/jetty-annotations-${jetty.version}.jar
# Need annotation processing jars too
LIB=lib/annotations/*.jar
lib/annotations/*.jar
[xml]
# Enable annotation scanning webapp configurations
etc/jetty-annotations.xml

View File

@ -2,7 +2,10 @@
# Base Module
#
OPTIONAL=jmx
[optional]
# JMX is optional, if it appears in the module tree then depend on it
jmx
LIB=lib/jetty-util-${jetty.version}.jar
LIB=lib/jetty-io-${jetty.version}.jar
[lib]
lib/jetty-util-${jetty.version}.jar
lib/jetty-io-${jetty.version}.jar

View File

@ -2,5 +2,6 @@
# Client Feature
#
[lib]
# Client jars
LIB=lib/jetty-client-${jetty.version}.jar
lib/jetty-client-${jetty.version}.jar

View File

@ -2,6 +2,8 @@
# Debug module
#
DEPEND=server
[depend]
server
[xml]
etc/jetty-debug.xml

View File

@ -2,10 +2,13 @@
# Deploy Feature
#
DEPEND=webapp
[depend]
webapp
[lib]
# Deploy jars
LIB=lib/jetty-deploy-${jetty.version}.jar
lib/jetty-deploy-${jetty.version}.jar
[xml]
# Deploy configuration
etc/jetty-deploy.xml

View File

@ -2,6 +2,8 @@
# Jetty HTTP Server
#
DEPEND=server
[depend]
server
[xml]
etc/jetty-http.xml

View File

@ -2,7 +2,9 @@
# Jetty HTTP Server
#
DEPEND=server
[depend]
server
[xml]
etc/jetty-ssl.xml
etc/jetty-https.xml

View File

@ -2,6 +2,8 @@
# IPAccess module
#
DEPEND=server
[depend]
server
[xml]
etc/jetty-ipaccess.xml

View File

@ -2,10 +2,13 @@
# JAAS Feature
#
DEPEND=server
[depend]
server
[lib]
# JAAS jars
LIB=lib/jetty-jaas-${jetty.version}.jar
lib/jetty-jaas-${jetty.version}.jar
[xml]
# JAAS configuration
etc/jetty-jaas.xml

View File

@ -2,8 +2,10 @@
# JMX Feature
#
[lib]
# JMX jars (as defined in start.config)
LIB=lib/jetty-jmx-${jetty.version}.jar
lib/jetty-jmx-${jetty.version}.jar
[xml]
# JMX configuration
etc/jetty-jmx.xml

View File

@ -2,8 +2,10 @@
# JNDI Support
#
DEPEND=server
[depend]
server
LIB=lib/jetty-jndi-${jetty.version}.jar
LIB=lib/jndi/*.jar
[lib]
lib/jetty-jndi-${jetty.version}.jar
lib/jndi/*.jar

View File

@ -2,7 +2,9 @@
# Jetty Servlet Module
#
DEPEND=servlet
[depend]
servlet
LIB=lib/jsp/*.jar
[lib]
lib/jsp/*.jar

View File

@ -2,6 +2,8 @@
# Low Resources module
#
DEPEND=server
[depend]
server
[xml]
etc/jetty-lowresources.xml

View File

@ -2,9 +2,12 @@
# Jetty Monitor module
#
DEPEND=server
DEPEND=client
[depend]
server
client
LIB=lib/jetty-monitor-${jetty.version}.jar
[lib]
lib/jetty-monitor-${jetty.version}.jar
[xml]
etc/jetty-monitor.xml

View File

@ -1,4 +1,6 @@
DOWNLOAD=http://repo1.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar:lib/npn/npn-boot-1.1.5.v20130313.jar
[download]
http://repo1.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar:lib/npn/npn-boot-1.1.5.v20130313.jar
INI=-Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
[ini]
-Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar

View File

@ -2,11 +2,14 @@
# Jetty Proxy module
#
DEPEND=server
DEPEND=security
DEPEND=jndi
[depend]
server
security
jndi
LIB=lib/jetty-plus-${jetty.version}.jar
[lib]
lib/jetty-plus-${jetty.version}.jar
[xml]
# Plus requires configuration
etc/jetty-plus.xml

View File

@ -2,10 +2,13 @@
# Jetty Proxy module
#
DEPEND=server
DEPEND=client
[depend]
server
client
LIB=lib/jetty-proxy-${jetty.version}.jar
[lib]
lib/jetty-proxy-${jetty.version}.jar
[xml]
# Proxy requires configuration
etc/jetty-proxy.xml

View File

@ -2,6 +2,8 @@
# Request Log module
#
DEPEND=server
[depend]
server
[xml]
etc/jetty-requestlog.xml

View File

@ -2,9 +2,12 @@
# Jetty Rewrite module
#
DEPEND=server
[depend]
server
LIB=lib/jetty-rewrite-${jetty.version}.jar
[lib]
lib/jetty-rewrite-${jetty.version}.jar
[xml]
# Annotations needs annotations configuration
etc/jetty-rewrite.xml

View File

@ -2,6 +2,8 @@
# Jetty Security Module
#
DEPEND=server
[depend]
server
LIB=lib/jetty-security-${jetty.version}.jar
[lib]
lib/jetty-security-${jetty.version}.jar

View File

@ -2,14 +2,17 @@
# Base server
#
DEPEND=base
DEPEND=xml
[depend]
base
xml
LIB=lib/servlet-api-3.1.jar
LIB=lib/jetty-schemas-3.1.jar
LIB=lib/jetty-http-${jetty.version}.jar
LIB=lib/jetty-continuation-${jetty.version}.jar
LIB=lib/jetty-server-${jetty.version}.jar
[lib]
lib/servlet-api-3.1.jar
lib/jetty-schemas-3.1.jar
lib/jetty-http-${jetty.version}.jar
lib/jetty-continuation-${jetty.version}.jar
lib/jetty-server-${jetty.version}.jar
[xml]
# Annotations needs annotations configuration
etc/jetty.xml

View File

@ -2,6 +2,8 @@
# Jetty Servlet Module
#
DEPEND=server
[depend]
server
LIB=lib/jetty-servlet-${jetty.version}.jar
[lib]
lib/jetty-servlet-${jetty.version}.jar

View File

@ -1,8 +1,11 @@
DEPEND=server
DEPEND=npn
[depend]
server
npn
LIB=lib/spdy/*.jar
[lib]
lib/spdy/*.jar
[xml]
etc/jetty-ssl.xml
etc/jetty-spdy.xml

View File

@ -2,6 +2,8 @@
# Stats module
#
DEPEND=server
[depend]
server
[xml]
etc/jetty-stats.xml

View File

@ -2,6 +2,8 @@
# Base server
#
DEPEND=servlet
[depend]
servlet
LIB=lib/jetty-webapp-${jetty.version}.jar
[lib]
lib/jetty-webapp-${jetty.version}.jar

View File

@ -3,12 +3,15 @@
#
# WebSocket needs Annotations feature
DEPEND=server
DEPEND=annotations
[depend]
server
annotations
# WebSocket needs websocket jars (as defined in start.config)
LIB=lib/websocket/*.jar
[lib]
lib/websocket/*.jar
# WebSocket needs websocket configuration
[xml]
etc/jetty-websockets.xml

View File

@ -2,6 +2,8 @@
# Stats module
#
DEPEND=server
[depend]
server
[xml]
etc/jetty-xinetd.xml

View File

@ -2,7 +2,9 @@
# Jetty XML Configuration
#
DEPEND=base
[depend]
base
LIB=lib/jetty-xml-${jetty.version}.jar
[lib]
lib/jetty-xml-${jetty.version}.jar