/*
* Copyright 2002-2006 the original author or authors.
*
* Licensed 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.openuap.cms.cm.data;
import java.io.File;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.openuap.cms.CmsPlugin;
import org.openuap.cms.cm.manager.ContentFieldManager;
import org.openuap.cms.cm.manager.ContentTableManager;
import org.openuap.cms.cm.model.ContentField;
import org.openuap.cms.cm.model.ContentTable;
import org.openuap.cms.data.AbstractDataImporter;
import org.openuap.runtime.util.ObjectLocator;
/**
* <p>
* 内容模型数据导入器.
* </p>
* <p>
* $Id: CmDataImporter.java 3925 2010-10-26 11:54:14Z orangeforjava $
* </p>
* @author Joseph
* @version 3.0
*/
public class CmDataImporter extends AbstractDataImporter {
public void importData(Map parameters) {
String fileName = (String) parameters.get(FILE_NAME);
// System.out.println("fileName="+fileName);
File file = null;
if (fileName == null) {
// 如果没有指定哪个文件,则寻找最新的文件导入
file = getDefaultImportFile();
} else {
file = new File(dataDir, fileName);
}
if (file != null && file.exists()) {
try {
// System.out.println("file="+file.getName());
importContentTable(file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public ContentTable importContentTable(File xmlFile) throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(xmlFile);
ContentTable ct = null;
try {
ContentTableManager ctManager = (ContentTableManager) ObjectLocator
.lookup("contentTableManager", CmsPlugin.PLUGIN_ID);
ct = new ContentTable();
//
Element ctElement = document.getRootElement();
String tableId = ctElement.attributeValue("tableId");
//
String name = ctElement.element("name").getTextTrim();
ct.setName(name);
//
String system = ctElement.element("system").getTextTrim();
ct.setSystem(new Integer(system));
//
String tableName = ctElement.element("tableName").getTextTrim();
ct.setTableName(tableName);
//
String entityName = ctElement.element("entityName").getTextTrim();
ct.setEntityName(entityName);
//
String entityPublishName = ctElement.element("entityPublishName")
.getTextTrim();
ct.setEntityPublishName(entityPublishName);
//
String allowIndex = ctElement.element("allowIndex").getTextTrim();
ct.setAllowIndex(new Integer(allowIndex));
//
String lastIndexDate = ctElement.element("lastIndexDate")
.getTextTrim();
ct.setLastIndexDate(new Long(lastIndexDate));
ct.setDsnid(0L);
ContentTable old_ct = ctManager.getContentTableByName(ct.getName());
Long tid = null;
if (old_ct != null) {
tid = old_ct.getTableId();
ct.setTableId(tid);
ctManager.saveContentTable(ct);
} else {
tid = ctManager.addContentTable(ct);
ct.setTableId(tid);
}
//
Element fieldsElement = ctElement.element("fields");
Set fieldSet = Collections.synchronizedSet(new HashSet());
if (fieldsElement != null) {
Iterator fieldIterator = fieldsElement.elementIterator("field");
if (fieldIterator != null) {
while (fieldIterator.hasNext()) {
Element fieldElement = (Element) fieldIterator.next();
ContentField field = importContentField(fieldElement,
ct);
//
//
fieldSet.add(field);
}
}
}
ct.setContentFieldsSet(fieldSet);
} catch (Exception e) {
e.printStackTrace();
}
return ct;
}
protected ContentField importContentField(final Element fieldElement,
final ContentTable ct) {
ContentField field = new ContentField();
String contentFieldId = fieldElement.attribute("contentFieldId")
.getText();
//
String fieldTitle = fieldElement.element("fieldTitle").getTextTrim();
field.setFieldTitle(fieldTitle);
//
String fieldName = fieldElement.element("fieldName").getTextTrim();
field.setFieldName(fieldName);
//
String fieldType = fieldElement.element("fieldType").getTextTrim();
field.setFieldType(fieldType);
//
String fieldSize = fieldElement.element("fieldSize").getTextTrim();
field.setFieldSize(fieldSize);
//
String fieldInput = fieldElement.element("fieldInput").getTextTrim();
field.setFieldInput(fieldInput);
//
String fieldDefaultValue = fieldElement.element("fieldDefaultValue")
.getTextTrim();
field.setFieldDefaultValue(fieldDefaultValue);
//
String fieldInputFilter = fieldElement.element("fieldInputFilter")
.getTextTrim();
field.setFieldInputFilter(fieldInputFilter);
//FIX:BUG 修正了原来忘记导入这个字段属性了
String fieldInputPicker = fieldElement.element("fieldInputPicker")
.getTextTrim();
field.setFieldInputPicker(fieldInputPicker);
//
String fieldInputPickerExtra = fieldElement.element(
"fieldInputPickerExtra").getTextTrim();
field.setFieldInputPickerExtra(fieldInputPickerExtra);
//
String fieldInputTpl = fieldElement.element("fieldInputTpl")
.getTextTrim();
field.setFieldInputTpl(fieldInputTpl);
//
String fieldDescription = fieldElement.element("fieldDescription")
.getTextTrim();
field.setFieldDescription(fieldDescription);
//
String fieldOrder = fieldElement.element("fieldOrder").getTextTrim();
field.setFieldOrder(new Integer(fieldOrder));
//
String fieldListDisplay = fieldElement.element("fieldListDisplay")
.getTextTrim();
field.setFieldListDisplay(new Integer(fieldListDisplay));
//
String mainField = fieldElement.element("mainField").getTextTrim();
field.setMainField(new Integer(mainField));
//
String titleField = fieldElement.element("titleField").getTextTrim();
field.setTitleField(new Integer(titleField));
//
String keywordsField = fieldElement.element("keywordsField")
.getTextTrim();
field.setKeywordsField(new Integer(keywordsField));
//
String photoField = fieldElement.element("photoField").getTextTrim();
field.setPhotoField(new Integer(photoField));
//
String fieldSearchable = fieldElement.element("fieldSearchable")
.getTextTrim();
field.setFieldSearchable(new Integer(fieldSearchable));
//
String enableContribution = fieldElement.element("enableContribution")
.getTextTrim();
field.setEnableContribution(new Integer(enableContribution));
//
String enableCollection = fieldElement.element("enableCollection")
.getTextTrim();
field.setEnableCollection(new Integer(enableCollection));
//
String enablePublish = fieldElement.element("enablePublish")
.getTextTrim();
field.setEnablePublish(new Integer(enablePublish));
//
String enableStatics = fieldElement.element("enableStatics")
.getTextTrim();
field.setEnableStatics(new Integer(enableStatics));
//
String indexType = fieldElement.element("indexType").getTextTrim();
field.setIndexType(indexType);
//
String storeType = fieldElement.element("storeType").getTextTrim();
field.setStoreType(storeType);
//
String termVectorType = fieldElement.element("termVectorType")
.getTextTrim();
field.setTermVectorType(termVectorType);
ContentFieldManager fieldManager = (ContentFieldManager) ObjectLocator
.lookup("contentFieldManager", CmsPlugin.PLUGIN_ID);
Long tableId = ct.getTableId();
field.setContentTable(ct);
//
if (fieldManager != null) {
ContentField old_field = fieldManager.getContentFieldByName(
tableId, fieldName);
if (old_field != null) {
field.setContentFieldId(old_field.getContentFieldId());
fieldManager.saveContentField(field);
} else {
Long fieldId = fieldManager.addContentField(field);
field.setContentFieldId(fieldId);
}
}
return field;
}
}