svn commit: r509764 - in /ofbiz/trunk/framework/webtools: config/ servicedef/ src/org/ofbiz/webtools/ webapp/webtools/ webapp/webtools/WEB-INF/ webapp/webtools/entity/ widget/

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r509764 - in /ofbiz/trunk/framework/webtools: config/ servicedef/ src/org/ofbiz/webtools/ webapp/webtools/ webapp/webtools/WEB-INF/ webapp/webtools/entity/ widget/

jonesde
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>