From 76fa1485398d41b822827ba10c03f57f0ea99419 Mon Sep 17 00:00:00 2001 From: Ariel Backenroth Date: Wed, 4 Oct 2006 05:04:35 +0000 Subject: [PATCH] - removing templating config file - renamed create xml content type to create form - writing xsds and xsls into the data dictionary - using search to implement TemplatingService.getTempalteTypes() - adding fields to create form screen for the root tag name to use within the schema and for a display name within the dropdown (friendly non file name name) - using aspects from the wcmModel to categorize and relate templates and templateoutputmethods git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@4014 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/messages/webclient.properties | 8 +- .../content/CreateXmlContentTypeWizard.java | 114 ++++++--- .../alfresco/web/templating/TemplateType.java | 10 +- .../web/templating/TemplatingService.java | 229 ++++++------------ .../templating/xforms/TemplateTypeImpl.java | 139 +++++------ .../web/templating/xforms/XFormsBean.java | 2 +- source/web/WEB-INF/faces-config-beans.xml | 8 + .../details.jsp | 15 +- 8 files changed, 255 insertions(+), 270 deletions(-) diff --git a/config/alfresco/messages/webclient.properties b/config/alfresco/messages/webclient.properties index 8b19d39722..8425143079 100644 --- a/config/alfresco/messages/webclient.properties +++ b/config/alfresco/messages/webclient.properties @@ -238,7 +238,7 @@ remove_user=Remove User create_space=Create Space add_content=Add Content create_content=Create Content -create_xml_content_type=Create XML Content Type +create_xml_content_type=Create Form add_multiple_files=Add Multiple Files import_directory=Import Directory advanced_space_wizard=Advanced Space Wizard @@ -641,12 +641,14 @@ content=Content text_content=Plain Text Content html_content=HTML Content xml_content=XML Content -create_xml_content_type_title=Create XML Content Type Wizard -create_xml_content_type_desc=Create XML Content Type +create_xml_content_type_title=Create Form Wizard +create_xml_content_type_desc=Create Form create_xml_content_type_step1_title=Upload an XML Schema create_xml_content_type_step1_desc=Upload an XML Schema create_xml_content_type_step2_title=Edit the XML Schema create_xml_content_type_step2_desc=This is the generated XForm based on the schema provided. +schema=Schema +schema_root_tag_name=Root Tag edit_xml_schema=Edit XML Schema template_type=Template Type configure_presentation_templates=Configure Presentation Templates diff --git a/source/java/org/alfresco/web/bean/content/CreateXmlContentTypeWizard.java b/source/java/org/alfresco/web/bean/content/CreateXmlContentTypeWizard.java index d82b0ac048..99942f6c6a 100644 --- a/source/java/org/alfresco/web/bean/content/CreateXmlContentTypeWizard.java +++ b/source/java/org/alfresco/web/bean/content/CreateXmlContentTypeWizard.java @@ -27,6 +27,7 @@ import org.alfresco.config.Config; import org.alfresco.config.ConfigElement; import org.alfresco.config.ConfigService; import org.alfresco.model.ContentModel; +import org.alfresco.model.WCMModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.ContentService; @@ -60,6 +61,8 @@ public class CreateXmlContentTypeWizard extends BaseWizardBean private final static Log LOGGER = LogFactory.getLog(CreateXmlContentTypeWizard.class); + private String schemaRootTagName; + private String templateName; private String presentationTemplateType; protected ContentService contentService; @@ -70,66 +73,71 @@ public class CreateXmlContentTypeWizard extends BaseWizardBean protected String finishImpl(FacesContext context, String outcome) throws Exception { + final TemplatingService ts = TemplatingService.getInstance(); // get the node ref of the node that will contain the content - NodeRef containerNodeRef; - String nodeId = this.navigator.getCurrentNodeId(); - if (nodeId == null) - { - containerNodeRef = this.nodeService.getRootNode(Repository.getStoreRef()); - } - else - { - containerNodeRef = new NodeRef(Repository.getStoreRef(), nodeId); - } - - FileInfo fileInfo = this.fileFolderService.create(containerNodeRef, - this.getSchemaFileName(), - ContentModel.TYPE_CONTENT); + final NodeRef contentFormsNodeRef = ts.getContentFormsNodeRef(); + + final FileInfo folderInfo = + this.fileFolderService.create(contentFormsNodeRef, + this.getTemplateName(), + ContentModel.TYPE_FOLDER); + FileInfo fileInfo = + this.fileFolderService.create(folderInfo.getNodeRef(), + this.getSchemaFileName(), + ContentModel.TYPE_CONTENT); final NodeRef schemaFileNodeRef = fileInfo.getNodeRef(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Created file node for file: " + - this.getSchemaFileName()); - + this.getSchemaFileName()); + // get a writer for the content and put the file - ContentWriter writer = contentService.getWriter(schemaFileNodeRef, - ContentModel.PROP_CONTENT, true); + ContentWriter writer = this.contentService.getWriter(schemaFileNodeRef, + ContentModel.PROP_CONTENT, + true); // set the mimetype and encoding writer.setMimetype("text/xml"); writer.setEncoding("UTF-8"); writer.putContent(this.getSchemaFile()); - fileInfo = this.fileFolderService.create(containerNodeRef, - this.getPresentationTemplateFileName(), - ContentModel.TYPE_CONTENT); + fileInfo = this.fileFolderService.create(folderInfo.getNodeRef(), + this.getPresentationTemplateFileName(), + ContentModel.TYPE_CONTENT); final NodeRef presentationTemplateFileNodeRef = fileInfo.getNodeRef(); if (LOGGER.isDebugEnabled()) LOGGER.debug("Created file node for file: " + - this.getPresentationTemplateFileName()); + this.getPresentationTemplateFileName()); // get a writer for the content and put the file - writer = contentService.getWriter(presentationTemplateFileNodeRef, - ContentModel.PROP_CONTENT, true); + writer = this.contentService.getWriter(presentationTemplateFileNodeRef, + ContentModel.PROP_CONTENT, + true); // set the mimetype and encoding writer.setMimetype("text/xml"); writer.setEncoding("UTF-8"); writer.putContent(this.getPresentationTemplateFile()); + + Map props = new HashMap(3, 1.0f); + props.put(WCMModel.PROP_SCHEMA_ROOT_TAG_NAME, this.getSchemaRootTagName()); + props.put(WCMModel.ASSOC_TEMPLATE_OUTPUT_METHODS, presentationTemplateFileNodeRef); + this.nodeService.addAspect(schemaFileNodeRef, WCMModel.ASPECT_TEMPLATE, props); + + // apply the titled aspect - title and description + props = new HashMap(3, 1.0f); + props.put(ContentModel.PROP_TITLE, this.getTemplateName()); + props.put(ContentModel.PROP_DESCRIPTION, ""); + this.nodeService.addAspect(schemaFileNodeRef, ContentModel.ASPECT_TITLED, props); - final TemplatingService ts = TemplatingService.getInstance(); - final String rootTagName = - this.getSchemaFileName().replaceAll("([^\\.])\\..+", "$1"); - final TemplateType tt = ts.newTemplateType(rootTagName, schemaFileNodeRef); - if (this.getPresentationTemplateFile() != null) - { - tt.addOutputMethod(new XSLTOutputMethod(presentationTemplateFileNodeRef)); - } - ts.registerTemplateType(tt); + props = new HashMap(3, 1.0f); + props.put(WCMModel.PROP_TEMPLATE_OUTPUT_METHOD_TYPE, this.getPresentationTemplateType()); + props.put(WCMModel.PROP_TEMPLATE_SOURCE, schemaFileNodeRef); + this.nodeService.addAspect(presentationTemplateFileNodeRef, WCMModel.ASPECT_TEMPLATE_OUTPUT_METHOD, props); // return the default outcome return outcome; } - + @Override public void init(Map parameters) { @@ -137,6 +145,8 @@ public class CreateXmlContentTypeWizard extends BaseWizardBean this.removeUploadedSchemaFile(); this.removeUploadedPresentationTemplateFile(); + this.schemaRootTagName = null; + this.templateName = null; } @Override @@ -299,7 +309,43 @@ public class CreateXmlContentTypeWizard extends BaseWizardBean { return this.getFile("pt"); } + + /** + * Sets the root tag name to use when processing the schema. + */ + public void setSchemaRootTagName(final String schemaRootTagName) + { + this.schemaRootTagName = schemaRootTagName; + } + /** + * @return the root tag name to use when processing the schema. + */ + public String getSchemaRootTagName() + { + return (this.schemaRootTagName == null && this.getSchemaFileName() != null + ? this.getSchemaFileName().replaceAll("([^\\.])\\..+", "$1") + : this.schemaRootTagName); + } + + /** + * Sets the human friendly name for this template. + */ + public void setTemplateName(final String templateName) + { + this.templateName = templateName; + } + + /** + * @return the human friendly name for this template. + */ + public String getTemplateName() + { + return (this.templateName == null && this.getSchemaFileName() != null + ? this.getSchemaFileName().replaceAll("(.+)\\..*", "$1") + : this.templateName); + } + /** * @return Returns a list of mime types to allow the user to select from */ diff --git a/source/java/org/alfresco/web/templating/TemplateType.java b/source/java/org/alfresco/web/templating/TemplateType.java index 4a823f8b73..f33e31c715 100644 --- a/source/java/org/alfresco/web/templating/TemplateType.java +++ b/source/java/org/alfresco/web/templating/TemplateType.java @@ -20,7 +20,6 @@ import org.w3c.dom.Document; import java.util.List; import java.net.URI; import java.io.Serializable; -//import org.alfresco.service.cmr.repository.NodeRef; /** * Encapsulation of a template type. @@ -32,15 +31,12 @@ public interface TemplateType /** the name of the template, which must be unique within the TemplatingService */ public String getName(); + /** the root tag to use within the schema */ + public String getRootTagName(); + /** the xml schema for this template type */ public Document getSchema(); - // public String /* URI */ getSchemaURI(); - -// public void setSchemaNodeRef(final NodeRef nodeRef); -// -// public NodeRef getSchemaNodeRef(); - //XXXarielb not used currently and not sure if it's necessary... // public void addInputMethod(final TemplateInputMethod in); diff --git a/source/java/org/alfresco/web/templating/TemplatingService.java b/source/java/org/alfresco/web/templating/TemplatingService.java index 30371cd0aa..dffb0ffe47 100644 --- a/source/java/org/alfresco/web/templating/TemplatingService.java +++ b/source/java/org/alfresco/web/templating/TemplatingService.java @@ -36,11 +36,12 @@ import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.model.ContentModel; +import org.alfresco.model.WCMModel; import org.alfresco.util.TempFileProvider; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.search.SearchService; +import org.alfresco.service.cmr.search.*; import org.alfresco.service.cmr.model.*; import org.alfresco.service.namespace.NamespaceService; import javax.faces.context.FacesContext; @@ -52,121 +53,6 @@ import org.alfresco.web.bean.repository.Repository; */ public final class TemplatingService implements Serializable { - //////////////////////////////////////////////////////////////////////////// - - /** - * Encapsulation of configuration file management. - */ - private static class Configuration - { - /** indicates whether or not the configuration file has been loaded */ - public static boolean loaded = false; - private static NodeRef configFileNodeRef = null; - - /** - * locate the configuration file. currently it is stored as - * templating_config.xml at the root of the data dictionary. - * - * @return the configuration file, which is currently all the - * TemplateTypes serialized using object serialization. - */ - private static NodeRef getConfigFile() - { - if (configFileNodeRef == null) - { - final TemplatingService ts = TemplatingService.INSTANCE; - LOGGER.debug("loading config file"); - // get the template from the special Email Templates folder - FacesContext fc = FacesContext.getCurrentInstance(); - String xpath = (Application.getRootPath(fc) + "/" + - Application.getGlossaryFolderName(fc)); - NodeRef rootNodeRef = ts.nodeService.getRootNode(Repository.getStoreRef()); - List results = ts.searchService.selectNodes(rootNodeRef, xpath, null, ts.namespaceService, false); - if (results.size() != 1) - throw new RuntimeException("expected one result for " + xpath); - NodeRef dataDictionaryNodeRef = results.get(0); - LOGGER.debug("loaded data dictionary " + dataDictionaryNodeRef); - try - { - Configuration.configFileNodeRef = - ts.fileFolderService.create(dataDictionaryNodeRef, - "templating_configuration.xml", - ContentModel.TYPE_CONTENT).getNodeRef(); - } - catch (FileExistsException fee) - { - Configuration.configFileNodeRef = - ts.fileFolderService.searchSimple(dataDictionaryNodeRef, "templating_configuration.xml"); - } - LOGGER.debug("loaded config file " + configFileNodeRef); - assert Configuration.configFileNodeRef != null : "unable to load templating_configuration.xml"; - } - return Configuration.configFileNodeRef; - } - - /** - * Load the configuration file into the templating service. - */ - public static void load() - throws IOException - { - final TemplatingService ts = TemplatingService.INSTANCE; - final NodeRef configFileNodeRef = getConfigFile(); - FacesContext fc = FacesContext.getCurrentInstance(); - final ContentReader contentReader = ts.contentService.getReader(configFileNodeRef, - ContentModel.TYPE_CONTENT); - if (contentReader == null) - LOGGER.debug("templating_config.xml is empty"); - else - { - LOGGER.debug("parsing templating_config.xml"); - final InputStream contentIn = contentReader.getContentInputStream(); - final ObjectInputStream in = new ObjectInputStream(contentIn); - try - { - while (true) - { - try - { - final TemplateType tt = (TemplateType)in.readObject(); - TemplatingService.INSTANCE.registerTemplateType(tt); - } - catch (EOFException eof) - { - break; - } - - } - in.close(); - } - catch (ClassNotFoundException cnfe) - { - TemplatingService.LOGGER.error(cnfe); - } - } - loaded = true; - } - - /** - * Save the current state of the templating service to the configuration file. - */ - public static void save() - throws IOException - { - final TemplatingService ts = TemplatingService.INSTANCE; - FacesContext fc = FacesContext.getCurrentInstance(); - final NodeRef configFileNodeRef = getConfigFile(); - final OutputStream contentOut = ts.contentService.getWriter(configFileNodeRef, ContentModel.TYPE_CONTENT, true).getContentOutputStream(); - final ObjectOutputStream out = new ObjectOutputStream(contentOut); - for (TemplateType tt : TemplatingService.INSTANCE.getTemplateTypes()) - { - out.writeObject(tt); - } - out.close(); - } - } - - //////////////////////////////////////////////////////////////////////////// /** * temporary location of the property on nodes that are xml files created @@ -196,14 +82,16 @@ public final class TemplatingService implements Serializable private final DictionaryService dictionaryService; private final NamespaceService namespaceService; private final SearchService searchService; + + private NodeRef contentFormsNodeRef; /** instantiated using spring */ public TemplatingService(final ContentService contentService, - final NodeService nodeService, - final FileFolderService fileFolderService, - final DictionaryService dictionaryService, - final NamespaceService namespaceService, - final SearchService searchService) + final NodeService nodeService, + final FileFolderService fileFolderService, + final DictionaryService dictionaryService, + final NamespaceService namespaceService, + final SearchService searchService) { this.contentService = contentService; this.nodeService = nodeService; @@ -218,46 +106,78 @@ public final class TemplatingService implements Serializable /** Provides the templating service instance, loads config if necessary */ public static TemplatingService getInstance() { - if (!Configuration.loaded) - { - LOGGER.debug("loading configuration"); - try - { - Configuration.load(); - } - catch (Throwable t) - { - LOGGER.error(t); - t.printStackTrace(); - } - } - return TemplatingService.INSTANCE; } + + /** + * @return the cached reference to the WCM Content Forms folder + */ + public NodeRef getContentFormsNodeRef() + { + if (this.contentFormsNodeRef == null) + { + final FacesContext fc = FacesContext.getCurrentInstance(); + final String xpath = (Application.getRootPath(fc) + "/" + + Application.getGlossaryFolderName(fc) + "/" + + Application.getContentFormsFolderName(fc)); + LOGGER.debug("locating content forms at " + xpath); + final List results = + searchService.selectNodes(nodeService.getRootNode(Repository.getStoreRef()), + xpath, + null, + namespaceService, + false); + this.contentFormsNodeRef = (results != null && results.size() == 1 ? results.get(0) : null); + } + return this.contentFormsNodeRef; + } /** returns all registered template types */ public Collection getTemplateTypes() { - return this.templateTypes.values(); + try + { + final SearchParameters sp = new SearchParameters(); + sp.addStore(Repository.getStoreRef()); + sp.setLanguage(SearchService.LANGUAGE_LUCENE); + final String q = "ASPECT:\"" + WCMModel.ASPECT_TEMPLATE + "\""; + sp.setQuery(q); + LOGGER.debug("running query [" + q + "]"); + final ResultSet rs = this.searchService.query(sp); + LOGGER.debug("received " + rs.length() + " results"); + final Collection result = new LinkedList(); + for (ResultSetRow row : rs) + { + final NodeRef nodeRef = row.getNodeRef(); + result.add(this.newTemplateType(nodeRef)); + } + return result; + } + catch (RuntimeException re) + { + LOGGER.error(re); + throw re; + } } /** return the template type by name or null if not found */ public TemplateType getTemplateType(final String name) { - return this.templateTypes.get(name); - } - - /** registers a template type. if one exists with the same name, it is replaced */ - public void registerTemplateType(final TemplateType tt) - { - this.templateTypes.put(tt.getName(), tt); try { - Configuration.save(); + final SearchParameters sp = new SearchParameters(); + sp.addStore(Repository.getStoreRef()); + sp.setLanguage(SearchService.LANGUAGE_LUCENE); + sp.setQuery("ASPECT:\"" + WCMModel.ASPECT_TEMPLATE + + "\" AND @" + Repository.escapeQName(ContentModel.PROP_TITLE) + + ":\"" + name + "\""); + final ResultSet rs = this.searchService.query(sp); + return (rs.length() == 1 ? this.newTemplateType(rs.getNodeRef(0)) : null); } - catch (IOException ioe) + catch (RuntimeException re) { - LOGGER.error(ioe); + LOGGER.error(re); + throw re; } } @@ -267,10 +187,21 @@ public final class TemplatingService implements Serializable * the template type implementation can be configured for the system, * or specified in the gui. */ - public TemplateType newTemplateType(final String name, - final NodeRef schemaNodeRef) + private TemplateType newTemplateType(final NodeRef schemaNodeRef) { - return new TemplateTypeImpl(name, schemaNodeRef); + LOGGER.debug("creating template type for " + schemaNodeRef); + final String title = (String) + this.nodeService.getProperty(schemaNodeRef, ContentModel.PROP_TITLE); + LOGGER.debug("title is " + title); + final String schemaRootTagName = (String) + this.nodeService.getProperty(schemaNodeRef, WCMModel.PROP_SCHEMA_ROOT_TAG_NAME); + LOGGER.debug("root tag name is " + schemaRootTagName); + TemplateType tt = new TemplateTypeImpl(title, schemaNodeRef, schemaRootTagName); + final NodeRef xslNodeRef = (NodeRef) + this.nodeService.getProperty(schemaNodeRef, WCMModel.ASSOC_TEMPLATE_OUTPUT_METHODS); + LOGGER.debug("xsl noderef is " + xslNodeRef); + tt.addOutputMethod(new XSLTOutputMethod(xslNodeRef)); + return tt; } /** utility function for creating a document */ diff --git a/source/java/org/alfresco/web/templating/xforms/TemplateTypeImpl.java b/source/java/org/alfresco/web/templating/xforms/TemplateTypeImpl.java index cd74159f87..4a0a020889 100644 --- a/source/java/org/alfresco/web/templating/xforms/TemplateTypeImpl.java +++ b/source/java/org/alfresco/web/templating/xforms/TemplateTypeImpl.java @@ -31,83 +31,76 @@ import org.xml.sax.SAXException; public class TemplateTypeImpl implements TemplateType { - private static final Log LOGGER = LogFactory.getLog(TemplateTypeImpl.class); + private static final Log LOGGER = LogFactory.getLog(TemplateTypeImpl.class); + + private transient Document schema; + private final NodeRef schemaNodeRef; + private final String name; + private final String rootTagName; + private final LinkedList outputMethods = + new LinkedList(); + private final static LinkedList INPUT_METHODS = + new LinkedList(); + + static + { + INPUT_METHODS.add(new XFormsInputMethod()); + } + + public TemplateTypeImpl(final String name, + final NodeRef schemaNodeRef, + final String rootTagName) + { + this.name = name; + this.schemaNodeRef = schemaNodeRef; + this.rootTagName = rootTagName; + } + + public String getName() + { + return this.name; + } - private transient Document schema; - private final NodeRef schemaNodeRef; - private final String name; - private final LinkedList outputMethods = - new LinkedList(); - private final static LinkedList INPUT_METHODS = - new LinkedList(); + public String getRootTagName() + { + return this.rootTagName; + } - static - { - INPUT_METHODS.add(new XFormsInputMethod()); - } - - public TemplateTypeImpl(final String name, - final NodeRef schemaNodeRef) - { - this.name = name; - this.schemaNodeRef = schemaNodeRef; - } + public Document getSchema() + { + if (this.schema == null) + { + final TemplatingService ts = TemplatingService.getInstance(); + try + { + //XXXarielb maybe cloneNode instead? + return /* this.schema = */ ts.parseXML(this.schemaNodeRef); + } + catch (Exception e) + { + LOGGER.error(e); + } + } + return this.schema; + } - public String getName() - { - return this.name; - } + public List getInputMethods() + { + return INPUT_METHODS; + } - public String /* URI */ getSchemaURI() - { - final javax.faces.context.FacesContext fc = - javax.faces.context.FacesContext.getCurrentInstance(); - final javax.servlet.http.HttpSession session = (javax.servlet.http.HttpSession) - fc.getExternalContext().getSession(true); - - org.alfresco.web.bean.repository.User user = (org.alfresco.web.bean.repository.User) - session.getAttribute(org.alfresco.web.app.servlet.AuthenticationHelper.AUTHENTICATION_USER); + public void addOutputMethod(TemplateOutputMethod output) + { + this.outputMethods.add(output); + } - String result = DownloadContentServlet.generateDownloadURL(this.schemaNodeRef, this.name + ".xsd"); - result += "?ticket=" + user.getTicket(); - return result; - } + public List getOutputMethods() + { + return this.outputMethods; + } - public Document getSchema() - { - if (this.schema == null) - { - final TemplatingService ts = TemplatingService.getInstance(); - try - { - //XXXarielb maybe cloneNode instead? - return /* this.schema = */ ts.parseXML(this.schemaNodeRef); - } - catch (Exception e) - { - LOGGER.error(e); - } - } - return this.schema; - } - - public List getInputMethods() - { - return INPUT_METHODS; - } - - public void addOutputMethod(TemplateOutputMethod output) - { - this.outputMethods.add(output); - } - - public List getOutputMethods() - { - return this.outputMethods; - } - - public int hashCode() - { - return this.getName().hashCode(); - } + public int hashCode() + { + return this.getName().hashCode(); + } } \ No newline at end of file diff --git a/source/java/org/alfresco/web/templating/xforms/XFormsBean.java b/source/java/org/alfresco/web/templating/xforms/XFormsBean.java index d34c0b406e..d1ec3a55b0 100644 --- a/source/java/org/alfresco/web/templating/xforms/XFormsBean.java +++ b/source/java/org/alfresco/web/templating/xforms/XFormsBean.java @@ -301,7 +301,7 @@ public class XFormsBean LOGGER.debug("building xform for schema " + tt.getName()); final Document result = builder.buildForm(xmlContent, schemaDocument, - tt.getName()); + tt.getRootTagName()); LOGGER.debug("generated xform: " + result); // LOGGER.debug(ts.writeXMLToString(result)); return result; diff --git a/source/web/WEB-INF/faces-config-beans.xml b/source/web/WEB-INF/faces-config-beans.xml index 4ea6598b8b..6dd9449a6c 100644 --- a/source/web/WEB-INF/faces-config-beans.xml +++ b/source/web/WEB-INF/faces-config-beans.xml @@ -2076,6 +2076,14 @@ fileFolderService #{FileFolderService} + + searchService + #{SearchService} + + + namespaceService + #{NamespaceService} + navigator #{NavigationBean} diff --git a/source/web/jsp/content/create-xml-content-type-wizard/details.jsp b/source/web/jsp/content/create-xml-content-type-wizard/details.jsp index ffe1414ddf..1a4c39c3ee 100644 --- a/source/web/jsp/content/create-xml-content-type-wizard/details.jsp +++ b/source/web/jsp/content/create-xml-content-type-wizard/details.jsp @@ -84,10 +84,10 @@ - + value="#{msg.schema}:"/> <% FileUploadBean upload = (FileUploadBean) @@ -111,11 +111,20 @@ if (upload == null || upload.getFile() == null) <% } %> + + + + + +