This is an automated email from the ASF dual-hosted git repository.
mbrohl pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new 8fac07a Improved: Replaces ModelInduceFromDb with widgets (OFBIZ-6510)
8fac07a is described below
commit 8fac07ad0aeb15af9bb28615f54bc514c7a4a2ba
Author: Benjamin Jugl <[email protected]>
AuthorDate: Wed Feb 3 11:57:36 2021 +0100
Improved: Replaces ModelInduceFromDb with widgets (OFBIZ-6510)
---
.../java/org/apache/ofbiz/base/util/UtilXml.java | 64 ++++++++++
.../org/apache/ofbiz/entity/model/ModelEntity.java | 19 +++
framework/webtools/config/WebtoolsUiLabels.xml | 40 ++++++
.../groovyScripts/entity/ModelInduceFromDb.groovy | 22 ++++
.../apache/ofbiz/webtools/WebToolsDbEvents.java | 141 +++++++++++++++++++++
framework/webtools/template/Main.ftl | 2 +-
.../webtools/template/entity/EntityRefList.ftl | 2 +-
.../webtools/template/entity/ModelInduceFromDb.ftl | 59 +++++++++
.../webapp/webtools/WEB-INF/controller.xml | 17 ++-
framework/webtools/widget/EntityScreens.xml | 20 +++
framework/webtools/widget/Menus.xml | 4 +-
11 files changed, 385 insertions(+), 5 deletions(-)
diff --git
a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilXml.java
b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilXml.java
index 0f95828..fbeee88 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilXml.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilXml.java
@@ -27,6 +27,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
+import java.io.StringWriter;
import java.io.Writer;
import java.net.URL;
import java.net.URLConnection;
@@ -39,6 +40,7 @@ import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
@@ -56,6 +58,7 @@ import org.apache.xerces.xni.XMLLocator;
import org.apache.xerces.xni.XMLResourceIdentifier;
import org.apache.xerces.xni.XMLString;
import org.apache.xerces.xni.XNIException;
+import org.w3c.dom.Comment;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
@@ -1237,5 +1240,66 @@ public final class UtilXml {
}
return "";
}
+
+ public static String convertDocumentToXmlString(Document document) {
+ TransformerFactory tf = TransformerFactory.newInstance();
+ Transformer transformer;
+ try {
+ transformer = tf.newTransformer();
+ transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
+ StringWriter writer = new StringWriter();
+ transformer.transform(new DOMSource(document), new
StreamResult(writer));
+ String output = writer.getBuffer().toString();
+ return output;
+ } catch (TransformerException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+ /**
+ * Returns an ASF Licence Header as a Comment Element
+ *
+ * @param document
+ * @return
+ */
+ public static Comment createApacheLicenceComment(Document document) {
+ String lb = "\n";
+
+ StringBuilder disclaimer = new StringBuilder();
+ disclaimer.append("Licensed to the Apache Software Foundation (ASF)
under one");
+ disclaimer.append(lb);
+ disclaimer.append("or more contributor license agreements. See the
NOTICE file");
+ disclaimer.append(lb);
+ disclaimer.append("distributed with this work for additional
information");
+ disclaimer.append(lb);
+ disclaimer.append("regarding copyright ownership. The ASF licenses
this file");
+ disclaimer.append(lb);
+ disclaimer.append("to you under the Apache License, Version 2.0 (the");
+ disclaimer.append(lb);
+ disclaimer.append("\"License\"); you may not use this file except in
compliance");
+ disclaimer.append(lb);
+ disclaimer.append("with the License. You may obtain a copy of the
License at");
+ disclaimer.append(lb);
+ disclaimer.append(lb);
+ disclaimer.append("http://www.apache.org/licenses/LICENSE-2.0");
+ disclaimer.append(lb);
+ disclaimer.append(lb);
+ disclaimer.append("Unless required by applicable law or agreed to in
writing,");
+ disclaimer.append(lb);
+ disclaimer.append("software distributed under the License is
distributed on an");
+ disclaimer.append(lb);
+ disclaimer.append("\"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY");
+ disclaimer.append(lb);
+ disclaimer.append("KIND, either express or implied. See the License
for the");
+ disclaimer.append(lb);
+ disclaimer.append("specific language governing permissions and
limitations");
+ disclaimer.append(lb);
+ disclaimer.append("under the License.");
+ disclaimer.append(lb);
+
+ return document.createComment(disclaimer.toString());
+ }
}
diff --git
a/framework/entity/src/main/java/org/apache/ofbiz/entity/model/ModelEntity.java
b/framework/entity/src/main/java/org/apache/ofbiz/entity/model/ModelEntity.java
index 0ccddbd..72bea12 100644
---
a/framework/entity/src/main/java/org/apache/ofbiz/entity/model/ModelEntity.java
+++
b/framework/entity/src/main/java/org/apache/ofbiz/entity/model/ModelEntity.java
@@ -2173,6 +2173,25 @@ public class ModelEntity implements
Comparable<ModelEntity>, Serializable {
return this.toXmlElement(document, this.getPackageName());
}
+ public Element toGroupXmlElement(Document document) {
+ return this.toGroupXmlElement(document, this.getPackageName());
+ }
+
+ public Element toGroupXmlElement(Document document, String packageName) {
+ if (UtilValidate.isNotEmpty(this.getPackageName()) &&
!packageName.equals(this.getPackageName())) {
+ Debug.logWarning(
+ "Export EntityModel XML Element [" + this.getEntityName()
+ "] with a NEW package - " + packageName,
+ MODULE);
+ }
+
+ Element root = document.createElement("entity-group");
+ root.setAttribute("group", packageName);
+
+ root.setAttribute("entity", this.getEntityName());
+
+ return root;
+ }
+
/**
* Writes entity model information in the Apple EOModelBundle format.
* For document structure and definition see:
http://developer.apple.com/documentation/InternetWeb/Reference/WO_BundleReference/
diff --git a/framework/webtools/config/WebtoolsUiLabels.xml
b/framework/webtools/config/WebtoolsUiLabels.xml
index c37d545..863e2c5 100644
--- a/framework/webtools/config/WebtoolsUiLabels.xml
+++ b/framework/webtools/config/WebtoolsUiLabels.xml
@@ -6001,4 +6001,44 @@
<value xml:lang="de">Typ</value>
<value xml:lang="en">Type</value>
</property>
+ <property key="WebtoolsModelInduceFromDb">
+ <value xml:lang="de">Modell-XML aus der Datenbank indizieren</value>
+ <value xml:lang="en">Induce Model XML from Database</value>
+ </property>
+ <property key="ModelInduceDatasourceName">
+ <value xml:lang="de">Datenquelle</value>
+ <value xml:lang="en">Datasource</value>
+ </property>
+ <property key="ModelInduceEntityModel">
+ <value xml:lang="de">Entitäten Model</value>
+ <value xml:lang="en">Entity Model</value>
+ </property>
+ <property key="ModelInduceEntityGroup">
+ <value xml:lang="de">Entitäten Gruppe</value>
+ <value xml:lang="en">Entity Group</value>
+ </property>
+ <property key="ModelInduceInducedText">
+ <value xml:lang="de">Induzierter Text</value>
+ <value xml:lang="en">Induced Text</value>
+ </property>
+ <property key="ModelInducePackageName">
+ <value xml:lang="de">Packet Name</value>
+ <value xml:lang="en">Package Name</value>
+ </property>
+ <property key="ModelInduceInduceTypeError">
+ <value xml:lang="de">Bitte Induzierungs Typen auswählen.</value>
+ <value xml:lang="en">Please select an Induce Type.</value>
+ </property>
+ <property key="ModelInduceDatasourceNameError">
+ <value xml:lang="de">Name der Datenquelle benötigt.</value>
+ <value xml:lang="en">Datasource name required.</value>
+ </property>
+ <property key="ModelInduceEntityGroupError">
+ <value xml:lang="de">Für den Induzierungstyp "EntitätenGruppe" wird
der Packet Name benötigt.</value>
+ <value xml:lang="en">Package name required for induce type
entitygroup.</value>
+ </property>
+ <property key="ModelInduceDataStructureError">
+ <value xml:lang="de">Ermittlung der Datenstruktur fehlgeschlagen.
Bitte gültige Datenquelle angeben.</value>
+ <value xml:lang="en">Could not determine Structure for this
datasource. Please choose a valid datasource.</value>
+ </property>
</resource>
diff --git a/framework/webtools/groovyScripts/entity/ModelInduceFromDb.groovy
b/framework/webtools/groovyScripts/entity/ModelInduceFromDb.groovy
new file mode 100644
index 0000000..181f907
--- /dev/null
+++ b/framework/webtools/groovyScripts/entity/ModelInduceFromDb.groovy
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+ inducedText = request.getAttribute("inducedText")
+
+ context.inducedText = inducedText
diff --git
a/framework/webtools/src/main/java/org/apache/ofbiz/webtools/WebToolsDbEvents.java
b/framework/webtools/src/main/java/org/apache/ofbiz/webtools/WebToolsDbEvents.java
new file mode 100644
index 0000000..8411100
--- /dev/null
+++
b/framework/webtools/src/main/java/org/apache/ofbiz/webtools/WebToolsDbEvents.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.ofbiz.webtools;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.ofbiz.base.util.UtilHttp;
+import org.apache.ofbiz.base.util.UtilMisc;
+import org.apache.ofbiz.base.util.UtilProperties;
+import org.apache.ofbiz.base.util.UtilValidate;
+import org.apache.ofbiz.base.util.UtilXml;
+import org.apache.ofbiz.entity.datasource.GenericDAO;
+import org.apache.ofbiz.entity.datasource.GenericHelperInfo;
+import org.apache.ofbiz.entity.model.ModelEntity;
+import org.w3c.dom.Comment;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class WebToolsDbEvents {
+ private static final String module = WebToolsDbEvents.class.getName();
+ public static final String resource = "WebtoolsUiLabels";
+ private static Document document;
+ private static final String TITLE = "Entities of an Apache Open For
Business Project (Apache OFBiz) Component";
+ private static final String DESCRIPTION = "None";
+ private static final String COPYRIGHT = String.format("Copyright 2001-%d
The Apache Software Foundation",
+ LocalDate.now().getYear());
+ private static final String AUTHOR = "None";
+ private static final String VERSION = "1.0";
+ private static final String SEPARATOR =
"=========================================================";
+ private static final String INTRO = "The modules in this file are as
follows:";
+ private static final String DEFAULTS = "======================== Defaults
=======================";
+ private static final String HEADER = "======================== Data Model
=====================";
+ private static final String XMLN_NAME = "xmlns:xsi";
+ private static final String XMLN_VALUE=
"http://www.w3.org/2001/XMLSchema-instance";
+ private static final String XSI_NAME = "xsi:noNamespaceSchemaLocation";
+ private static final String XSI_VALUE =
"http://ofbiz.apache.org/dtds/entitymodel.xsd";
+
+ /**
+ * Indexes the Datasource defined in the entityengine.xml
+ *
+ * @param request
+ * @param response
+ * @return
+ */
+ public static String modelInduceFromDb(HttpServletRequest request,
HttpServletResponse response) {
+ List<String> errorMessageList = new ArrayList<>();
+ Map<String, Object> params = UtilHttp.getParameterMap(request);
+ Locale locale = UtilHttp.getLocale(request);
+
+ String induceType = (String) params.get("induceType");
+ String datasourceName = (String) params.get("datasourceName");
+ String packageName = (String) params.get("packageName");
+
+ if (UtilValidate.isEmpty(induceType)) {
+ errorMessageList.add(UtilProperties.getMessage(resource,
"ModelInduceInduceTypeError", locale));
+ }
+
+ if (UtilValidate.isEmpty(datasourceName)) {
+ errorMessageList.add(UtilProperties.getMessage(resource,
"ModelInduceDatasourceNameError", locale));
+ }
+
+ if ("entitygroup".equals(induceType) &&
UtilValidate.isEmpty(packageName)) {
+ errorMessageList.add(UtilProperties.getMessage(resource,
"ModelInduceEntityGroupError", locale));
+ }
+
+ if (UtilValidate.isNotEmpty(errorMessageList)) {
+ request.setAttribute("errorMessageList", errorMessageList);
+ return "error";
+ }
+
+ document = UtilXml.makeEmptyXmlDocument();
+
+ Element entitymodel = document.createElement("entitymodel");
+ entitymodel.setAttribute(XMLN_NAME, XMLN_VALUE);
+ entitymodel.setAttribute(XSI_NAME, XSI_VALUE);
+ Comment licenceDisclaimer =
UtilXml.createApacheLicenceComment(document);
+ document.appendChild(licenceDisclaimer);
+ document.appendChild(entitymodel);
+
+ entitymodel.appendChild(document.createComment(SEPARATOR));
+ entitymodel.appendChild(document.createComment(DEFAULTS));
+ entitymodel.appendChild(document.createComment(SEPARATOR));
+
+ if ("entitymodel".equals(induceType)) {
+ UtilXml.addChildElementValue(entitymodel, "title", TITLE,
document);
+ UtilXml.addChildElementValue(entitymodel, "description",
DESCRIPTION, document);
+ UtilXml.addChildElementValue(entitymodel, "copyright", COPYRIGHT,
document);
+ UtilXml.addChildElementValue(entitymodel, "author", AUTHOR,
document);
+ UtilXml.addChildElementValue(entitymodel, "version", VERSION,
document);
+
+ entitymodel
+ .appendChild(document.createComment(SEPARATOR));
+ entitymodel
+ .appendChild(document.createComment(HEADER));
+ entitymodel.appendChild(document.createComment(INTRO));
+ entitymodel
+ .appendChild(document.createComment(SEPARATOR));
+ }
+ GenericDAO dao = GenericDAO.getGenericDAO(new GenericHelperInfo(null,
datasourceName));
+ List<ModelEntity> newEntList = dao.induceModelFromDb(new
ArrayList<String>());
+ if (UtilValidate.isEmpty(newEntList)) {
+ request.setAttribute("errorMessageList",
+ UtilMisc.toList(UtilProperties.getMessage(resource,
"ModelInduceDataStructureError", locale)));
+ return "error";
+ }
+
+ for (ModelEntity entity : newEntList) {
+ if ("entitymodel".equals(induceType)) {
+ entitymodel.appendChild(entity.toXmlElement(document,
packageName));
+ } else {
+ entitymodel.appendChild(entity.toGroupXmlElement(document,
packageName));
+ }
+ }
+
+ request.setAttribute("inducedText",
UtilXml.convertDocumentToXmlString(document));
+ return "success";
+ }
+}
diff --git a/framework/webtools/template/Main.ftl
b/framework/webtools/template/Main.ftl
index 3024c2e..e1ac9a4 100644
--- a/framework/webtools/template/Main.ftl
+++ b/framework/webtools/template/Main.ftl
@@ -57,7 +57,7 @@ under the License.
<li><a href="<@ofbizUrl>entityrefReport</@ofbizUrl>"
target="_blank">${uiLabelMap.WebtoolsEntityReferencePdf}</a></li>
<li><a
href="<@ofbizUrl>EntitySQLProcessor</@ofbizUrl>">${uiLabelMap.PageTitleEntitySQLProcessor}</a></li>
<li><a
href="<@ofbizUrl>EntitySyncStatus</@ofbizUrl>">${uiLabelMap.WebtoolsEntitySyncStatus}</a></li>
- <li><a href="<@ofbizUrl>view/ModelInduceFromDb</@ofbizUrl>"
target="_blank">${uiLabelMap.WebtoolsInduceModelXMLFromDatabase}</a></li>
+ <li><a href="<@ofbizUrl>ModelInduceFromDb</@ofbizUrl>"
target="_blank">${uiLabelMap.WebtoolsInduceModelXMLFromDatabase}</a></li>
<li><a
href="<@ofbizUrl>EntityEoModelBundle</@ofbizUrl>">${uiLabelMap.WebtoolsExportEntityEoModelBundle}</a></li>
<li><a
href="<@ofbizUrl>view/checkdb</@ofbizUrl>">${uiLabelMap.WebtoolsCheckUpdateDatabase}</a></li>
<li><a
href="<@ofbizUrl>ConnectionPoolStatus</@ofbizUrl>">${uiLabelMap.ConnectionPoolStatus}</a></li>
diff --git a/framework/webtools/template/entity/EntityRefList.ftl
b/framework/webtools/template/entity/EntityRefList.ftl
index 55e2387..9630710 100644
--- a/framework/webtools/template/entity/EntityRefList.ftl
+++ b/framework/webtools/template/entity/EntityRefList.ftl
@@ -48,7 +48,7 @@ under the License.
<a href="<@ofbizUrl>ModelGroupWriter</@ofbizUrl>"
target='_blank'>Generate Entity Group XML</a><br/>
<a
href="<@ofbizUrl>ModelGroupWriter?savetofile=true</@ofbizUrl>"
target='_blank'>Save Entity Group XML to File</a><br/>
-->
- <a href="<@ofbizUrl>view/ModelInduceFromDb</@ofbizUrl>"
target='_blank'>${uiLabelMap.WebtoolsInduceModelXMLFromDatabase}</a><br/>
+ <a href="<@ofbizUrl>ModelInduceFromDb</@ofbizUrl>"
target='_blank'>${uiLabelMap.WebtoolsInduceModelXMLFromDatabase}</a><br/>
</#if>
<#if packageNames?has_content>
<hr />
diff --git a/framework/webtools/template/entity/ModelInduceFromDb.ftl
b/framework/webtools/template/entity/ModelInduceFromDb.ftl
new file mode 100644
index 0000000..bb40ce6
--- /dev/null
+++ b/framework/webtools/template/entity/ModelInduceFromDb.ftl
@@ -0,0 +1,59 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you 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.
+-->
+<div
class="page-title"><span>${uiLabelMap.WebtoolsModelInduceFromDb}</span></div>
+<form class="basic-form" method="post"
action="<@ofbizUrl>CreateModelInduceFromDb</@ofbizUrl>">
+ <table class="basic-table" cellspacing="0">
+ <tbody>
+ </tr>
+ <td class="label">
+ <label>${uiLabelMap.ModelInduceDatasourceName}</label>
+ </td>
+ <td>
+ <input type="text" name="datasourceName"/>
+ </td>
+ </tr>
+ <tr>
+ <td class="label">
+ <label>${uiLabelMap.ModelInducePackageName}</label>
+ </td>
+ <td>
+ <input type="text" name="packageName"/>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>
+ <select name="induceType">
+ <option
value="entitymodel">${uiLabelMap.ModelInduceEntityModel}</option>
+ <option
value="entitygroup">${uiLabelMap.ModelInduceEntityGroup}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="submit" name="submitButton"/>
+ </td><td></td>
+ </tr>
+ </tbody>
+ </table>
+</form>
+</hr>
+<div>
+ <textarea cols="60" rows="50"
name="${uiLabelMap.ModelInduceInducedText}">${inducedText!}</textarea>
+</div>
diff --git a/framework/webtools/webapp/webtools/WEB-INF/controller.xml
b/framework/webtools/webapp/webtools/WEB-INF/controller.xml
index 481638d..4ded5c7 100644
--- a/framework/webtools/webapp/webtools/WEB-INF/controller.xml
+++ b/framework/webtools/webapp/webtools/WEB-INF/controller.xml
@@ -443,6 +443,20 @@ under the License.
<response name="success" type="view" value="ConnectionPoolStatus"/>
</request-map>
+ <!-- ModelInducedFromDb requests-->
+ <request-map uri="CreateModelInduceFromDb">
+ <security https="true" auth="true"/>
+ <event type="java" path="org.apache.ofbiz.webtools.WebToolsDbEvents"
invoke="modelInduceFromDb"/>
+ <response name="success" type="view" value="ModelInduceFromDb"/>
+ <response name="error" type="view" value="ModelInduceFromDb"/>
+ </request-map>
+
+ <request-map uri="ModelInduceFromDb">
+ <security https="true" auth="true"/>
+ <response name="success" type="view" value="ModelInduceFromDb"/>
+ <response name="error" type="view" value="ModelInduceFromDb"/>
+ </request-map>
+
<!-- Entity Export/Import requests -->
<request-map uri="ProgramExport">
<security https="true" auth="true"/>
@@ -640,7 +654,8 @@ under the License.
<view-map name="dataMySql" page="template/entity/dataMySql.jsp"/>
<view-map name="ModelWriter" page="template/entity/ModelWriter.jsp"/>
<view-map name="ModelGroupWriter"
page="template/entity/ModelGroupWriter.jsp"/>
- <view-map name="ModelInduceFromDb"
page="template/entity/ModelInduceFromDb.jsp"/>
+
+ <view-map name="ModelInduceFromDb" type="screen"
page="component://webtools/widget/EntityScreens.xml#ModelInduceFromDb"/>
<view-map name="EntityEoModelBundle" type="screen"
page="component://webtools/widget/EntityScreens.xml#EntityEoModelBundle"/>
<view-map name="checkdb" type="screen"
page="component://webtools/widget/EntityScreens.xml#CheckDb"/>
diff --git a/framework/webtools/widget/EntityScreens.xml
b/framework/webtools/widget/EntityScreens.xml
index f03c78a..edae79b 100644
--- a/framework/webtools/widget/EntityScreens.xml
+++ b/framework/webtools/widget/EntityScreens.xml
@@ -484,6 +484,26 @@ under the License.
</section>
</screen>
+ <screen name="ModelInduceFromDb">
+ <section>
+ <actions>
+ <property-map resource="WebtoolsUiLabels"
map-name="uiLabelMap" global="true"/>
+ <script
location="component://webtools/groovyScripts/entity/ModelInduceFromDb.groovy"/>
+ </actions>
+ <widgets>
+ <decorator-screen name="CommonImportExportDecorator"
location="${parameters.mainDecoratorLocation}">
+ <decorator-section name="body">
+ <screenlet>
+ <platform-specific>
+ <html><html-template
location="component://webtools/template/entity/ModelInduceFromDb.ftl"/></html>
+ </platform-specific>
+ </screenlet>
+ </decorator-section>
+ </decorator-screen>
+ </widgets>
+ </section>
+ </screen>
+
<screen name="ConnectionPoolStatus">
<section>
<actions>
diff --git a/framework/webtools/widget/Menus.xml
b/framework/webtools/widget/Menus.xml
index 2cf57d8..34b6e93 100644
--- a/framework/webtools/widget/Menus.xml
+++ b/framework/webtools/widget/Menus.xml
@@ -74,8 +74,8 @@ under the License.
<menu-item name="data" title="${uiLabelMap.WebtoolsDataFileTools}">
<link target="viewdatafile"/>
</menu-item>
- <menu-item name="modelInduceFromDb"
title="${uiLabelMap.WebtoolsInduceModelXMLFromDatabase}">
- <link target="view/ModelInduceFromDb"/>
+ <menu-item name="ModelInduceFromDb"
title="${uiLabelMap.WebtoolsInduceModelXMLFromDatabase}">
+ <link target="ModelInduceFromDb"/>
</menu-item>
<menu-item name="entityEoModelBundle"
title="${uiLabelMap.WebtoolsExportEntityEoModelBundle}">
<link target="EntityEoModelBundle"/>