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> |
Free forum by Nabble | Edit this page |