You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by df...@apache.org on 2004/05/12 19:20:20 UTC
cvs commit: jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/i18n MessageManager.java
dflorey 2004/05/12 10:20:20
Modified: proposals/projector/src/java/org/apache/slide/projector/resource
MultipleStreamableResource.java
proposals/projector/src/java/org/apache/slide/projector/engine
ProcessServlet.java ProcessorManager.java
proposals/projector/src/java/org/apache/slide/projector/i18n
MessageManager.java
Added: proposals/projector/src/java/org/apache/slide/projector/engine
ApplicationListener.java Application.java
ApplicationManager.java
Removed: proposals/projector/src/java/org/apache/slide/projector/engine
PackageManager.java
Log:
Application management introduced
Revision Changes Path
1.2 +1 -64 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/resource/MultipleStreamableResource.java
Index: MultipleStreamableResource.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/resource/MultipleStreamableResource.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MultipleStreamableResource.java 3 May 2004 14:20:24 -0000 1.1
+++ MultipleStreamableResource.java 12 May 2004 17:20:20 -0000 1.2
@@ -1,66 +1,3 @@
-/*
- * $Header$
- * $Revision$
- * $Date$
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- * any, must include the following acknowlegement:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowlegement may appear in the software itself,
- * if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Slide", and "Apache Software
- * Foundation" must not be used to endorse or promote products derived
- * from this software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- * nor may "Apache" appear in their names without prior written
- * permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- * [Additional notices, if required by prior licensing conditions]
- *
- */
-
package org.apache.slide.projector.resource;
import org.apache.slide.projector.util.StreamHelper;
1.4 +1 -0 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessServlet.java
Index: ProcessServlet.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessServlet.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ProcessServlet.java 11 May 2004 15:23:43 -0000 1.3
+++ ProcessServlet.java 12 May 2004 17:20:20 -0000 1.4
@@ -29,6 +29,7 @@
private final static String allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ ApplicationManager.getInstance();
Context context = new HttpContext(request, response);
URI uri = new URIResource(request.getRequestURI().substring(request.getContextPath().length()+request.getServletPath().length()));
try {
1.4 +42 -13 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessorManager.java
Index: ProcessorManager.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessorManager.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ProcessorManager.java 11 May 2004 15:23:43 -0000 1.3
+++ ProcessorManager.java 12 May 2004 17:20:20 -0000 1.4
@@ -31,7 +31,7 @@
* They are reloaded if an event occurs that indicates, that the class or configuration has changed
* or was updated.
*/
-public class ProcessorManager {
+public class ProcessorManager implements ApplicationListener {
public final static URI BINARY = new URIResource("/image");
public final static URI LOCALE_RESOLVER = new URIResource("/localeResolver");
public final static URI URL = new URIResource("/url");
@@ -41,36 +41,58 @@
private final static URI SMALL_DEFAULT_ICON = new URIResource("/files/contelligent/images/process.jpg");
private final static URI LARGE_DEFAULT_ICON = new URIResource("/files/contelligent/images/process.jpg");
-
- private Map processorMap;
+ private Map installedProcessors = new HashMap();
+ private Map processorMap = new HashMap(256);
private List processorDescriptors = new ArrayList();
- private List configuredProcessors;
+ private List configuredProcessors = new ArrayList();
private static ProcessorManager processorManager = new ProcessorManager();
private ProcessorClassLoader processorClassLoader = new ProcessorClassLoader(this.getClass().getClassLoader(), new URIResource(Constants.CLASSES_DIR));
private ProcessorManager() {
- configure();
}
- void configure() {
- processorMap = new HashMap(256);
- configuredProcessors = new ArrayList();
- processorDescriptors = new ArrayList();
+ public void install(final Application application) {
+ logger.log(Level.INFO, "Installing processors of application '"+application.getApplicationUri()+"'");
try {
- List processorConfigurations = PackageManager.getInstance().getProcessorConfigurations();
+ List processorConfigurations = application.getProcessors();
for ( Iterator i = processorConfigurations.iterator(); i.hasNext(); ) {
+ List processors = new ArrayList();
URI configurationUri = (URI)i.next();
InputStream configuration = ((StreamableResource)ConnectorFactory.getConnector().getResource(configurationUri, Constants.CREDENTIALS)).getInputStream();
SimpleImporter importer = new SimpleImporter();
- ConfigurationHandler handler = new ConfigurationHandler();
+ ConfigurationHandler handler = new ConfigurationHandler(processors);
importer.addSimpleImportHandler(handler);
importer.parse(new InputSource(configuration));
+ installedProcessors.put(configurationUri, processors);
+ ConnectorFactory.getConnector().subscribe("Update", configurationUri.toString(), 0, Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
+ new Subscriber() {
+ public void notify(Map information) {
+ uninstall(application);
+ install(application);
+ }
+ }, Constants.CREDENTIALS);
}
} catch (Exception exception) {
logger.log(Level.SEVERE, "Error while parsing configuration", exception);
}
}
-
+
+ public void uninstall(Application application) {
+ logger.log(Level.INFO, "Uninstalling processors of application '"+application.getApplicationUri()+"'");
+ for ( Iterator i = application.getProcessors().iterator(); i.hasNext(); ) {
+ URI processorsUri = (URI)i.next();
+ List processors = (List)installedProcessors.get(processorsUri);
+ for ( Iterator j = processors.iterator(); j.hasNext(); ) {
+ URI processorUri = (URI)j.next();
+ processorMap.remove(processorUri);
+ ProcessorDescriptor processorDescriptor = getProcessorDescriptor(processorUri);
+ processorDescriptors.remove(processorDescriptor);
+ configuredProcessors.remove(processorDescriptor.getConfiguration());
+ logger.log(Level.INFO, "Removing processor: "+processorUri);
+ }
+ }
+ }
+
public static ProcessorManager getInstance() {
return processorManager;
}
@@ -192,7 +214,13 @@
}
public class ConfigurationHandler extends DefaultSimpleImportHandler {
- public void startElement(SimplePath path, String name, AttributesImpl attributes, String leadingCDdata) {
+ List processors;
+
+ public ConfigurationHandler(List processors) {
+ this.processors = processors;
+ }
+
+ public void startElement(SimplePath path, String name, AttributesImpl attributes, String leadingCDdata) {
if (path.matches("processor")) {
final URI uri = new URIResource(attributes.getValue("uri"));
final String configURI = attributes.getValue("config-uri");
@@ -243,6 +271,7 @@
}
registerProcessor(uri, processor);
processorDescriptors.add(processorDescriptor);
+ processors.add(uri);
} catch (Exception e) {
logger.log(Level.SEVERE, "Processor " + clazz + " could not be created or configured!", e);
}
1.1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ApplicationListener.java
Index: ApplicationListener.java
===================================================================
package org.apache.slide.projector.engine;
public interface ApplicationListener {
public void install(Application application);
public void uninstall(Application application);
}
1.1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Application.java
Index: Application.java
===================================================================
/*
* Created on 12.05.2004
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
package org.apache.slide.projector.engine;
import java.util.ArrayList;
import java.util.List;
import org.apache.slide.projector.URI;
public final class Application {
private URI applicationUri;
private String displayName, vendor, description;
private List processors = new ArrayList();
private List messages = new ArrayList();
private List jobs = new ArrayList();
Application(URI applicationUri) {
this.applicationUri = applicationUri;
}
public URI getApplicationUri() {
return applicationUri;
}
String getDescription() {
return description;
}
void setDescription(String description) {
this.description = description;
}
String getDisplayName() {
return displayName;
}
void setDisplayName(String displayName) {
this.displayName = displayName;
}
void addJobs(URI jobsUri) {
jobs.add(jobsUri);
}
List getJobs() {
return jobs;
}
void addMessages(URI messagesUri) {
messages.add(messagesUri);
}
public List getMessages() {
return messages;
}
void addProcessors(URI processorsUri) {
processors.add(processorsUri);
}
List getProcessors() {
return processors;
}
String getVendor() {
return vendor;
}
void setVendor(String vendor) {
this.vendor = vendor;
}
}
1.1 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ApplicationManager.java
Index: ApplicationManager.java
===================================================================
package org.apache.slide.projector.engine;
import de.zeigermann.xml.simpleImporter.DefaultSimpleImportHandler;
import de.zeigermann.xml.simpleImporter.SimpleImporter;
import de.zeigermann.xml.simpleImporter.SimplePath;
import org.apache.slide.projector.*;
import org.apache.slide.projector.connector.ConnectorFactory;
import org.apache.slide.projector.connector.Subscriber;
import org.apache.slide.projector.i18n.MessageManager;
import org.apache.slide.projector.resource.ArrayResource;
import org.apache.slide.projector.resource.StreamableResource;
import org.apache.slide.projector.resource.URIResource;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.ParserConfigurationException;
public class ApplicationManager {
private final static Logger logger = Logger.getLogger(ApplicationManager.class.getName());
private final static String APPLICATION_CONFIG = "application.xml";
private static ApplicationManager applicationManager;
private List applicationListeners = new ArrayList();
private List applications = new ArrayList();
private ApplicationManager() {
logger.log(Level.INFO, "Starting projector...");
ConnectorFactory.getConnector().subscribe("Update/newmember", Constants.APPLICATIONS_DIR, 1, Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
new Subscriber() {
public void notify(Map information) {
logger.log(Level.INFO, "Package manager received add event");
applicationManager.configure();
}
}, Constants.CREDENTIALS);
ConnectorFactory.getConnector().subscribe("Delete", Constants.APPLICATIONS_DIR, 1, Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
new Subscriber() {
public void notify(Map information) {
logger.log(Level.INFO, "Package manager received delete event");
applicationManager.configure();
}
}, Constants.CREDENTIALS);
applicationListeners.add(ProcessorManager.getInstance());
applicationListeners.add(MessageManager.getInstance());
configure();
}
private synchronized void configure() {
final Context context = new SystemContext();
logger.log(Level.INFO, "Parsing application configurations");
Resource[] applicationUris;
try {
List removedApplications = new ArrayList();
removedApplications.addAll(applications);
applicationUris = ((ArrayResource)ConnectorFactory.getConnector().getChildren(new URIResource(Constants.APPLICATIONS_DIR), context.getCredentials())).getArray();
for ( int i = 0; i < applicationUris.length; i++ ) {
URI applicationUri = new URIResource(applicationUris[i]+"/");
if ( !isApplicationInstalled(applicationUri) ) {
SimpleImporter importer = new SimpleImporter();
URI applicationDefinition = new URIResource(applicationUri.toString()+APPLICATION_CONFIG);
StreamableResource applicationDefinitionResouce = ((StreamableResource)ConnectorFactory.getConnector().getResource(applicationDefinition, context.getCredentials()));
if ( applicationDefinitionResouce != null ) {
try {
InputStream configuration = applicationDefinitionResouce.getInputStream();
ConfigurationHandler handler = new ConfigurationHandler(applicationUri);
importer.addSimpleImportHandler(handler);
importer.parse(new InputSource(configuration));
Application installedApplication = handler.getApplication();
install(installedApplication);
} catch (ParserConfigurationException e) {
logger.log(Level.SEVERE, "Exception while parsing application configuration. Skipping installation...", e);
} catch (SAXException e) {
logger.log(Level.SEVERE, "Exception while parsing application configuration. Skipping installation...", e);
}
} else {
logger.log(Level.SEVERE, "Application definition (application.xml) not found in directory '"+applicationUri+"'. Application will not be installed!");
}
} else {
logger.log(Level.INFO, "Application '"+applicationUri+"' already installed");
removedApplications.remove(getApplication(removedApplications, applicationUri));
}
}
for ( Iterator i = removedApplications.iterator(); i.hasNext(); ) {
Application removedApplication = (Application)i.next();
uninstall(removedApplication);
}
} catch (IOException e) {
logger.log(Level.SEVERE, "Could not determine installed applications!", e);
}
}
public static ApplicationManager getInstance() {
if ( applicationManager == null ) {
applicationManager = new ApplicationManager();
}
return applicationManager;
}
private Application getApplication(List applications, URI applicationUri) {
for ( Iterator i = applications.iterator(); i.hasNext(); ) {
Application application = (Application)i.next();
if ( application.getApplicationUri().equals(applicationUri) ) return application;
}
return null;
}
private boolean isApplicationInstalled(URI applicationUri) {
for ( Iterator i = applications.iterator(); i.hasNext(); ) {
if ( ((Application)i.next()).getApplicationUri().equals(applicationUri) ) return true;
}
return false;
}
private void install(Application application) {
logger.log(Level.INFO, "Install application '"+application.getApplicationUri()+"'");
for ( Iterator i = applicationListeners.iterator(); i.hasNext(); ) {
((ApplicationListener)i.next()).install(application);
}
applications.add(application);
}
private void uninstall(Application application) {
logger.log(Level.INFO, "Uninstall application '"+application.getApplicationUri()+"'");
for ( Iterator i = applicationListeners.iterator(); i.hasNext(); ) {
((ApplicationListener)i.next()).uninstall(application);
}
applications.remove(applications.indexOf(application));
}
private void update(Application application) {
uninstall(application);
install(application);
}
public List getProcessorConfigurations() {
List processorConfigurations = new ArrayList();
for ( Iterator i = applications.iterator(); i.hasNext(); ) {
Application application = (Application)i.next();
processorConfigurations.addAll(application.getProcessors());
}
return processorConfigurations;
}
static private final class ConfigurationHandler extends DefaultSimpleImportHandler {
private Application application;
private URI applicationUri;
private ConfigurationHandler(URI applicationUri) {
this.applicationUri = applicationUri;
}
private Application getApplication() {
return application;
}
public void startElement(SimplePath path, String name, AttributesImpl attributes, String leadingCDdata) {
if (path.matches("application")) {
application = new Application(applicationUri);
} else if ( path.matches("display-name") ) {
application.setDisplayName(leadingCDdata);
} else if ( path.matches("vendor") ) {
application.setVendor(leadingCDdata);
} else if ( path.matches("description") ) {
application.setDescription(leadingCDdata);
} else if ( path.matches("content/processors") ) {
String uri = attributes.getValue("uri");
application.addProcessors(new URIResource(applicationUri+uri));
} else if ( path.matches("content/messages") ) {
application.addMessages(new URIResource(applicationUri+attributes.getValue("uri")));
} else if ( path.matches("content/jobs") ) {
application.addJobs(new URIResource(applicationUri+attributes.getValue("uri")));
}
}
}
}
1.2 +60 -27 jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/i18n/MessageManager.java
Index: MessageManager.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/i18n/MessageManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MessageManager.java 3 May 2004 14:20:27 -0000 1.1
+++ MessageManager.java 12 May 2004 17:20:20 -0000 1.2
@@ -4,43 +4,44 @@
import de.zeigermann.xml.simpleImporter.SimpleImporter;
import de.zeigermann.xml.simpleImporter.SimplePath;
import org.apache.slide.projector.Constants;
+import org.apache.slide.projector.URI;
import org.apache.slide.projector.connector.ConnectorFactory;
import org.apache.slide.projector.connector.Subscriber;
+import org.apache.slide.projector.engine.Application;
+import org.apache.slide.projector.engine.ApplicationListener;
import org.apache.slide.projector.resource.StreamableResource;
-import org.apache.slide.projector.resource.URIResource;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.AttributesImpl;
import java.io.InputStream;
import java.text.MessageFormat;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
-public class MessageManager {
+public class MessageManager implements ApplicationListener {
private static Logger logger = Logger.getLogger(MessageManager.class.getName());
private final static String MESSAGES_CONFIG = "messages.xml";
private final static String MESSAGES_NOT_FOUND_ID = "messageNotFound";
- private Map messages;
+ private Map installedMessages = new HashMap();
+ private Map messages = new HashMap();
private static MessageManager messageManager = new MessageManager();
private MessageManager() {
- ConnectorFactory.getConnector().subscribe("Update", Constants.CONFIG_DIR + MESSAGES_CONFIG,
- 0, Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
- new Subscriber() {
- public void notify(Map information) {
- logger.log(Level.INFO, "Reloading message manager");
- configure();
- }
- }, Constants.CREDENTIALS);
- configure();
}
+ public static MessageManager getInstance() {
+ return messageManager;
+ }
+
public static String getText(String id, String entry, Object[] arguments, Locale locale, String defaultText) {
Message message = messageManager.findMessage(id, locale);
if (message != null) return messageManager.format(message.getEntry(entry), arguments);
@@ -59,20 +60,52 @@
return message.getEntries();
}
- private void configure() {
- messages = new HashMap();
+ public void install(final Application application) {
+ logger.log(Level.INFO, "Installing messages of application '"+application.getApplicationUri()+"'");
try {
- InputStream inputStream = ((StreamableResource)ConnectorFactory.getConnector().getResource(new URIResource(Constants.CONFIG_DIR + MESSAGES_CONFIG), Constants.CREDENTIALS)).getInputStream();
- SimpleImporter importer = new SimpleImporter();
- importer.setIncludeLeadingCDataIntoStartElementCallback(true);
- ConfigurationHandler handler = new ConfigurationHandler(messages);
- importer.addSimpleImportHandler(handler);
- importer.parse(new InputSource(inputStream));
+ List messageConfigurations = application.getMessages();
+ Map applicationMessages = new HashMap();
+ for ( Iterator i = messageConfigurations.iterator(); i.hasNext(); ) {
+ URI messagesUri = (URI)i.next();
+ StreamableResource messagesResource = (StreamableResource)ConnectorFactory.getConnector().getResource(messagesUri, Constants.CREDENTIALS);
+ if ( messagesResource != null ) {
+ InputStream inputStream = messagesResource.getInputStream();
+ SimpleImporter importer = new SimpleImporter();
+ importer.setIncludeLeadingCDataIntoStartElementCallback(true);
+ ConfigurationHandler handler = new ConfigurationHandler();
+ importer.addSimpleImportHandler(handler);
+ importer.parse(new InputSource(inputStream));
+ Map parsedMessages = handler.getMessages();
+ applicationMessages.putAll(parsedMessages);
+ ConnectorFactory.getConnector().subscribe("Update", messagesUri.toString(),
+ 0, Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
+ new Subscriber() {
+ public void notify(Map information) {
+ uninstall(application);
+ install(application);
+ }
+ }, Constants.CREDENTIALS);
+ } else {
+ logger.log(Level.INFO, "Configured messages resource '"+messagesUri+"' not found!");
+ }
+ }
+ messages.putAll(applicationMessages);
+ installedMessages.put(application.getApplicationUri(), applicationMessages.keySet());
} catch (Exception exception) {
logger.log(Level.SEVERE, "Error while parsing messages", exception);
}
- }
-
+ }
+
+ public void uninstall(Application application) {
+ logger.log(Level.INFO, "Uninstalling messages of application '"+application.getApplicationUri()+"'");
+ Collection messageKeys = (Collection)installedMessages.get(application.getApplicationUri());
+ for ( Iterator i = messageKeys.iterator(); i.hasNext(); ) {
+ String messageKey = (String)i.next();
+ messages.remove(messageKey);
+ logger.log(Level.INFO, "Removing message with key '"+messageKey+"'");
+ }
+ }
+
private String format(String formatString, Object[] arguments) {
if (formatString == null) return null;
return MessageFormat.format(formatString, arguments);
@@ -105,14 +138,10 @@
}
class ConfigurationHandler extends DefaultSimpleImportHandler {
- private Map messages;
+ private Map messages = new HashMap();
private String id;
private Message message;
- public ConfigurationHandler(Map messages) {
- this.messages = messages;
- }
-
public void startElement(SimplePath path, String name, AttributesImpl attributes, String leadingCDdata) {
if (path.matches("message")) {
id = attributes.getValue("id");
@@ -131,6 +160,10 @@
if (path.matches("message/locale")) {
messages.put(message.getKey(), message);
}
+ }
+
+ Map getMessages() {
+ return messages;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org