Author: jonesde
Date: Tue Feb 20 13:41:15 2007
New Revision: 509764
URL: http://svn.apache.org/viewvc?view=rev&rev=509764
Log:
Added page for importing from readers; this is especially helpful when updating
a server and you need to refresh the seed data, but of course there are many
other uses
Added:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/EntityImportReaders.ftl
(with props)
Modified:
ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.properties
ofbiz/trunk/framework/webtools/servicedef/services.xml
ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java
ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml
ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl
ofbiz/trunk/framework/webtools/widget/EntityScreens.xml
Modified: ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.properties
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.properties?view=diff&rev=509764&r1=509763&r2=509764
==============================================================================
--- ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.properties (original)
+++ ofbiz/trunk/framework/webtools/config/WebtoolsUiLabels.properties Tue Feb
20 13:41:15 2007
@@ -29,6 +29,7 @@
PageTitleEntityExportAll=XML Data Export All
PageTitleEntityImport=XML Data Import
PageTitleEntityImportDir=XML Data Import Dir
+PageTitleEntityImportReaders=XML Data Import Readers
PageTitleEntitySyncStatus=Entity Sync Status
PageTitleEntitySQLProcessor=Entity SQL Processor
PageTitleFindUtilCache=Cache Maintenance Page
@@ -267,7 +268,7 @@
WebtoolsTable=TABLE
WebtoolsThread=Thread
WebtoolsThreadList=Thread List
-WebtoolsTimeoutSeconds=TX Timeout Seconds (for each entity)
+WebtoolsTimeoutSeconds=TX Timeout Seconds (for each entity or file)
WebtoolsTimingLogLevel=Timing
WebtoolsTimingLogLevelTooltip=The Timing Level designates fine-grained
informational events that are most useful to debug an application.
WebtoolsTitle=Title
Modified: ofbiz/trunk/framework/webtools/servicedef/services.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/servicedef/services.xml?view=diff&rev=509764&r1=509763&r2=509764
==============================================================================
--- ofbiz/trunk/framework/webtools/servicedef/services.xml (original)
+++ ofbiz/trunk/framework/webtools/servicedef/services.xml Tue Feb 20 13:41:15
2007
@@ -62,6 +62,18 @@
<attribute name="filePause" type="Long" mode="IN" optional="true"/>
<attribute name="messages" type="List" mode="OUT" optional="false"/>
</service>
+ <service name="entityImportReaders" engine="java"
+ location="org.ofbiz.webtools.WebToolsServices"
invoke="entityImportReaders" auth="true" use-transaction="false">
+ <description>Imports an entity xml file or text string</description>
+ <attribute name="readers" type="String" mode="IN" optional="true"/>
+ <attribute name="overrideDelegator" type="String" mode="IN"
optional="true"/>
+ <attribute name="overrideGroup" type="String" mode="IN"
optional="true"/>
+ <attribute name="mostlyInserts" type="String" mode="IN"
optional="true"/>
+ <attribute name="maintainTimeStamps" type="String" mode="IN"
optional="true"/>
+ <attribute name="createDummyFks" type="String" mode="IN"
optional="true"/>
+ <attribute name="txTimeout" type="Integer" mode="IN" optional="true"/>
+ <attribute name="messages" type="List" mode="OUT" optional="false"/>
+ </service>
<service name="entityExportAll" engine="java"
location="org.ofbiz.webtools.WebToolsServices"
invoke="entityExportAll" auth="true" use-transaction="false">
<description>Exports all entities into xml files</description>
Modified:
ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java?view=diff&rev=509764&r1=509763&r2=509764
==============================================================================
--- ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java
(original)
+++ ofbiz/trunk/framework/webtools/src/org/ofbiz/webtools/WebToolsServices.java
Tue Feb 20 13:41:15 2007
@@ -18,8 +18,10 @@
*******************************************************************************/
package org.ofbiz.webtools;
+import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
@@ -40,13 +42,19 @@
import java.net.URL;
import java.net.MalformedURLException;
+import javolution.util.FastList;
+
+import org.ofbiz.base.container.ContainerException;
import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.StringUtil;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilURL;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilDateTime;
import org.ofbiz.entity.GenericDelegator;
+import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.util.EntityDataLoader;
import org.ofbiz.entity.util.EntityListIterator;
import org.ofbiz.entity.util.EntitySaxReader;
import org.ofbiz.entity.model.ModelReader;
@@ -290,6 +298,101 @@
return resp;
}
+ public static Map entityImportReaders(DispatchContext dctx, Map context) {
+ String readers = (String) context.get("readers");
+ String overrideDelegator = (String) context.get("overrideDelegator");
+ String overrideGroup = (String) context.get("overrideGroup");
+ boolean useDummyFks = "true".equals((String)
context.get("createDummyFks"));
+ boolean maintainTxs = "true".equals((String)
context.get("maintainTimeStamps"));
+ boolean tryInserts = "true".equals((String)
context.get("mostlyInserts"));
+
+ Integer txTimeoutInt = (Integer) context.get("txTimeout");
+ int txTimeout = txTimeoutInt != null ? txTimeoutInt.intValue() : -1;
+
+ List messages = FastList.newInstance();
+
+ // parse the pass in list of readers to use
+ List readerNames = null;
+ if (UtilValidate.isNotEmpty(readers) &&
!"none".equalsIgnoreCase(readers)) {
+ if (readers.indexOf(",") == -1) {
+ readerNames = FastList.newInstance();
+ readerNames.add(readers);
+ } else {
+ readerNames = StringUtil.split(readers, ",");
+ }
+ }
+
+ String groupNameToUse = overrideGroup != null ? overrideGroup :
"org.ofbiz";
+ GenericDelegator delegator =
UtilValidate.isNotEmpty(overrideDelegator) ?
GenericDelegator.getGenericDelegator(overrideDelegator) : dctx.getDelegator();
+
+ String helperName = delegator.getGroupHelperName(groupNameToUse);
+ if (helperName == null) {
+ return ServiceUtil.returnError("Unable to locate the datasource
helper for the group [" + groupNameToUse + "]");
+ }
+
+ // get the reader name URLs first
+ List urlList = null;
+ if (readerNames != null) {
+ urlList = EntityDataLoader.getUrlList(helperName, readerNames);
+ } else if (!"none".equalsIgnoreCase(readers)) {
+ urlList = EntityDataLoader.getUrlList(helperName);
+ }
+
+ // need a list if it is empty
+ if (urlList == null) {
+ urlList = FastList.newInstance();
+ }
+
+ // process the list of files
+ NumberFormat changedFormat = NumberFormat.getIntegerInstance();
+ changedFormat.setMinimumIntegerDigits(5);
+ changedFormat.setGroupingUsed(false);
+
+ List errorMessages = new LinkedList();
+ List infoMessages = new LinkedList();
+ int totalRowsChanged = 0;
+ if (urlList != null && urlList.size() > 0) {
+ messages.add("=-=-=-=-=-=-= Doing a data load with the following
files:");
+ Iterator urlIter = urlList.iterator();
+ while (urlIter.hasNext()) {
+ URL dataUrl = (URL) urlIter.next();
+ messages.add(dataUrl.toExternalForm());
+ }
+
+ messages.add("=-=-=-=-=-=-= Starting the data load...");
+
+ urlIter = urlList.iterator();
+ while (urlIter.hasNext()) {
+ URL dataUrl = (URL) urlIter.next();
+ try {
+ int rowsChanged = EntityDataLoader.loadData(dataUrl,
helperName, delegator, errorMessages, txTimeout, useDummyFks, maintainTxs,
tryInserts);
+ totalRowsChanged += rowsChanged;
+ infoMessages.add(changedFormat.format(rowsChanged) + " of
" + changedFormat.format(totalRowsChanged) + " from " +
dataUrl.toExternalForm());
+ } catch (GenericEntityException e) {
+ Debug.logError(e, "Error loading data file: " +
dataUrl.toExternalForm(), module);
+ }
+ }
+ } else {
+ messages.add("=-=-=-=-=-=-= No data load files found.");
+ }
+
+ if (infoMessages.size() > 0) {
+ messages.add("=-=-=-=-=-=-= Here is a summary of the data load:");
+ messages.addAll(infoMessages);
+ }
+
+ if (errorMessages.size() > 0) {
+ messages.add("=-=-=-=-=-=-= The following errors occured in the
data load:");
+ messages.addAll(errorMessages);
+ }
+
+ messages.add("=-=-=-=-=-=-= Finished the data load with " +
totalRowsChanged + " rows changed.");
+
+ Map resultMap = ServiceUtil.returnSuccess();
+ resultMap.put("messages", messages);
+ return resultMap;
+ }
+
public static Map parseEntityXmlFile(DispatchContext dctx, Map context) {
GenericDelegator delegator = dctx.getDelegator();
@@ -416,5 +519,4 @@
Map resp = UtilMisc.toMap("results", results);
return resp;
}
-
}
Modified: ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml?view=diff&rev=509764&r1=509763&r2=509764
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml
(original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/WEB-INF/controller.xml Tue
Feb 20 13:41:15 2007
@@ -433,6 +433,14 @@
<response name="error" type="view" value="EntityImport"/>
</request-map>
+ <request-map uri="EntityImportReaders"><security https="true"
auth="true"/><response name="success" type="view"
value="EntityImportReaders"/><response name="error" type="view"
value="EntityImport"/></request-map>
+ <request-map uri="entityImportReaders">
+ <security https="true" auth="true"/>
+ <event type="service" path="" invoke="entityImportReaders"/>
+ <response name="success" type="view" value="EntityImportReaders"/>
+ <response name="error" type="view" value="EntityImportReaders"/>
+ </request-map>
+
<!-- EntitySync requests -->
<request-map uri="EntitySyncStatus">
<security https="true" auth="true"/>
@@ -578,7 +586,8 @@
<view-map name="EntityExportAll"
page="component://webtools/widget/EntityScreens.xml#EntityExportAll"
type="screen"/>
<view-map name="EntityImportDir"
page="component://webtools/widget/EntityScreens.xml#EntityImportDir"
type="screen"/>
<view-map name="EntityImport"
page="component://webtools/widget/EntityScreens.xml#EntityImport"
type="screen"/>
-
+ <view-map name="EntityImportReaders"
page="component://webtools/widget/EntityScreens.xml#EntityImportReaders"
type="screen"/>
+
<view-map name="ViewComponents"
page="component://webtools/widget/MiscScreens.xml#ViewComponents"
type="screen"/>
<!-- end of view mappings -->
</site-conf>
Added:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/EntityImportReaders.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/entity/EntityImportReaders.ftl?view=auto&rev=509764
==============================================================================
---
ofbiz/trunk/framework/webtools/webapp/webtools/entity/EntityImportReaders.ftl
(added)
+++
ofbiz/trunk/framework/webtools/webapp/webtools/entity/EntityImportReaders.ftl
Tue Feb 20 13:41:15 2007
@@ -0,0 +1,40 @@
+<#--
+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="head1">${uiLabelMap.WebtoolsImportToDataSource}</div>
+<div>${uiLabelMap.WebtoolsMessage5}.</div>
+<hr/>
+ <div class="head2">${uiLabelMap.WebtoolsImport}:</div>
+
+ <form method="post" action="<@ofbizUrl>entityImportReaders</@ofbizUrl>">
+ <div class="tabletext">Enter Readers (comma separated, no spaces; from
entityengine.xml and ofbiz-component.xml files; common ones include
seed,ext,demo):</div>
+ <div><input type="text" class="inputBox" size="60" name="readers"
value="${readers?default("seed")}"/></div>
+ <div class="tabletext"><input type="checkbox" name="mostlyInserts" <#if
mostlyInserts?exists>"checked"</#if>/>${uiLabelMap.WebtoolsMostlyInserts}</div>
+ <div class="tabletext"><input type="checkbox" name="maintainTimeStamps"
<#if
keepStamps?exists>"checked"</#if>/>${uiLabelMap.WebtoolsMaintainTimestamps}</div>
+ <div class="tabletext"><input type="checkbox" name="createDummyFks" <#if
createDummyFks?exists>"checked"</#if>/>${uiLabelMap.WebtoolsCreateDummyFks}</div>
+ <div class="tabletext">${uiLabelMap.WebtoolsTimeoutSeconds}:<input
type="text" size="6" value="${txTimeoutStr?default("7200")}"
name="txTimeout"/></div>
+ <div><input type="submit" value="${uiLabelMap.WebtoolsImport}"/></div>
+ </form>
+ <hr/>
+ <#if messages?exists>
+ <h3>${uiLabelMap.WebtoolsResults}:</h3>
+ <#list messages as message>
+ <div class="tabletext">${message}</div>
+ </#list>
+ </#if>
Propchange:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/EntityImportReaders.ftl
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/EntityImportReaders.ftl
------------------------------------------------------------------------------
svn:keywords = "Date Rev Author URL Id"
Propchange:
ofbiz/trunk/framework/webtools/webapp/webtools/entity/EntityImportReaders.ftl
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl?view=diff&rev=509764&r1=509763&r2=509764
==============================================================================
--- ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl (original)
+++ ofbiz/trunk/framework/webtools/webapp/webtools/main.ftl Tue Feb 20 13:41:15
2007
@@ -86,6 +86,7 @@
<li><a
href="<@ofbizUrl>/EntityExportAll</@ofbizUrl>">${uiLabelMap.PageTitleEntityExportAll}</a></li>
<li><a
href="<@ofbizUrl>/EntityImport</@ofbizUrl>">${uiLabelMap.PageTitleEntityImport}</a></li>
<li><a
href="<@ofbizUrl>/EntityImportDir</@ofbizUrl>">${uiLabelMap.PageTitleEntityImportDir}</a></li>
+ <li><a
href="<@ofbizUrl>/EntityImportReaders</@ofbizUrl>">${uiLabelMap.PageTitleEntityImportReaders}</a></li>
</#if>
<#if security.hasPermission("SERVICE_MAINT", session)>
<li><h3>${uiLabelMap.WebtoolsServiceEngineTools}</h3></li>
Modified: ofbiz/trunk/framework/webtools/widget/EntityScreens.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/widget/EntityScreens.xml?view=diff&rev=509764&r1=509763&r2=509764
==============================================================================
--- ofbiz/trunk/framework/webtools/widget/EntityScreens.xml (original)
+++ ofbiz/trunk/framework/webtools/widget/EntityScreens.xml Tue Feb 20 13:41:15
2007
@@ -127,6 +127,32 @@
</fail-widgets>
</section>
</screen>
+ <screen name="EntityImportReaders">
+ <section>
+ <condition>
+ <if-has-permission permission="ENTITY_MAINT"/>
+ </condition>
+ <actions>
+ <set field="title" value="XML Import"/>
+ <set field="titleProperty"
value="PageTitleEntityImportReaders"/>
+ <set field="parameters.TRANSACTION_TIMEOUT" value="7200"/>
+
+ <set field="messages" from-field="parameters.messages"/>
+ </actions>
+ <widgets>
+ <decorator-screen name="CommonWebtoolsDecorator"
location="${parameters.mainDecoratorLocation}">
+ <decorator-section name="body">
+ <platform-specific>
+ <html><html-template
location="component://webtools/webapp/webtools/entity/EntityImportReaders.ftl"/></html>
+ </platform-specific>
+ </decorator-section>
+ </decorator-screen>
+ </widgets>
+ <fail-widgets>
+ <label
style="head3">${uiLabelMap.WebtoolsPermissionError}</label>
+ </fail-widgets>
+ </section>
+ </screen>
<screen name="EntityMaint">
<section>
<condition>