package org.openedit.entermedia.modules; import java.io.Reader; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.entermedia.workspace.WorkspaceManager; import org.openedit.Data; import org.openedit.data.PropertyDetail; import org.openedit.data.Searcher; import org.openedit.entermedia.util.CSVReader; import com.openedit.WebPageRequest; import com.openedit.entermedia.scripts.Script; import com.openedit.entermedia.scripts.ScriptLogger; import com.openedit.entermedia.scripts.ScriptManager; import com.openedit.page.Page; import com.openedit.util.FileUtils; import com.openedit.util.URLUtilities; public class DataImportModule extends DataEditModule { protected ScriptManager fieldScriptManager; protected WorkspaceManager fieldWorkspaceManager; public WorkspaceManager getWorkspaceManager() { return fieldWorkspaceManager; } public void setWorkspaceManager(WorkspaceManager inWorkspaceManager) { fieldWorkspaceManager = inWorkspaceManager; } public ScriptManager getScriptManager() { return fieldScriptManager; } public void setScriptManager(ScriptManager inScriptManager) { fieldScriptManager = inScriptManager; } public List listImportScripts(WebPageRequest inReq) throws Exception { String dataroot = inReq.findValue("dataroot"); List scripts = getPageManager().getChildrenPaths(dataroot + "/import/scripts/", true); List pages = new ArrayList(); Set dups = new HashSet(); for (Iterator iterator = scripts.iterator(); iterator.hasNext();) { String path = (String) iterator.next(); if (!path.endsWith(".xconf")) { Page page = getPageManager().getPage(path); if (!dups.contains(page.getName())) { pages.add(page); dups.add(page.getName()); } } } inReq.putPageValue("scripts", pages); return scripts; } public void importDataWithScript(WebPageRequest inReq) throws Exception { String dataroot = inReq.findValue("dataroot"); String filename = inReq.findValue("scriptname"); Script script = getScriptManager().loadScript(dataroot + "/import/scripts/" + filename); Map variables = new HashMap(); variables.put("context", inReq); variables.put("moduleManager", getModuleManager()); ScriptLogger logger = new ScriptLogger(); logger.startCapture(); variables.put("log", logger); try { getScriptManager().execScript(variables, script); } finally { logger.stopCapture(); } } /** * @deprecated use @importDataWithScript * @param inReq * @throws Exception */ public void importData(WebPageRequest inReq) throws Exception { Searcher searcher = loadSearcher(inReq); List data = new ArrayList(); Page upload = getPageManager().getPage("/WEB-INF/temp/import/import.csv"); Reader reader = upload.getReader(); try { boolean done = false; CSVReader read = new CSVReader(reader, ',', '\"'); String[] headers = read.readNext(); int idcolumn = 0; String line = null; int rowNum = 0; Data question = null; List questions = new ArrayList(); String[] tabs; while ((tabs = read.readNext()) != null) { rowNum++; String idCell = tabs[idcolumn]; // This means we have moved on to a new product //natasha 18584 if (idCell != null) { if (question == null || !question.getId().equals(idCell)) { Data target = (Data) searcher.searchById(idCell); //Data target = null; if (target == null) { for (Iterator iterator = data.iterator(); iterator.hasNext();) { Data one = (Data) iterator.next(); if (idCell.equals(one.getId())) { target = one; } } } if (target == null) { target = searcher.createNewData(); target.setId(idCell); } addProperties(searcher, headers, tabs, target); if (target.getSourcePath() == null) { target.setSourcePath(target.getId()); } data.add(target); } } } // inErrorLog.add("Processed: " + products.size() + " products"); // inSearcher.clear(); // input.delete(); } finally { FileUtils.safeClose(reader); } searcher.saveAllData(data, inReq.getUser()); searcher.reIndexAll(); } /** * @deprecated use @importDataWithScript */ protected void addProperties(Searcher inSearcher, String[] inHeaders, String[] inInTabs, Data inProduct) { for (int i = 0; i < inHeaders.length; i++) { String header = inHeaders[i]; PropertyDetail detail = inSearcher.getPropertyDetails().getDetail( header); String val = inInTabs[i].trim(); val = URLUtilities.xmlEscape(val); if("sourcepath".equals(header)){ inProduct.setSourcePath(val); } if (detail != null && val != null && val.length() > 0) { inProduct.setProperty(detail.getId(), val); } else if(val != null && val.length() >0){ inProduct.setProperty(header, val); } } } public void saveScript(WebPageRequest inReq) throws Exception { String dataroot = inReq.findValue("dataroot"); String filename = inReq.findValue("filename"); String code = inReq.findValue("scriptcode"); Page page = getPageManager().getPage(dataroot + "/import/scripts/" + filename); getPageManager().saveContent(page, inReq.getUser(), code, "web edit"); } public void deleteScript(WebPageRequest inReq) throws Exception { String dataroot = inReq.findValue("dataroot"); String filename = inReq.findValue("filename"); String code = inReq.findValue("scriptcode"); Page page = getPageManager().getPage(dataroot + "/import/scripts/" + filename); getPageManager().removePage(page); } public void createTable(WebPageRequest inReq) throws Exception { String tablename = inReq.findValue("tablename"); String catalogid = inReq.findValue("catalogid"); String prefix = inReq.findValue("prefix"); String searchtype = getWorkspaceManager().createTable(catalogid, tablename, prefix); inReq.setRequestParameter("searchtype", searchtype); } public void deleteTable(WebPageRequest inReq) throws Exception { String catalogid = inReq.findValue("catalogid"); String searchtype = inReq.getRequestParameter("searchtype"); Page xml = getPageManager().getPage("/WEB-INF/data/" + catalogid + "/fields/" + searchtype +".xml" ); getPageManager().removePage(xml); Page list = getPageManager().getPage("/WEB-INF/data/" + catalogid + "/lists/" + searchtype +".xml" ); getPageManager().removePage(list); } }