1 17 package org.alfresco.jcr.importer; 18 19 import java.io.File ; 20 import java.io.FileWriter ; 21 import java.io.IOException ; 22 import java.util.ArrayList ; 23 import java.util.HashMap ; 24 import java.util.List ; 25 import java.util.Map ; 26 27 import org.alfresco.repo.content.MimetypeMap; 28 import org.alfresco.repo.importer.view.ElementContext; 29 import org.alfresco.repo.importer.view.NodeContext; 30 import org.alfresco.service.cmr.dictionary.DataTypeDefinition; 31 import org.alfresco.service.cmr.repository.ContentData; 32 import org.alfresco.service.cmr.view.ImporterException; 33 import org.alfresco.service.namespace.QName; 34 import org.alfresco.util.ISO9075; 35 import org.alfresco.util.TempFileProvider; 36 37 38 44 public class PropertyContext extends ElementContext 45 { 46 private NodeContext parentContext; 47 private QName propertyName; 48 private QName propertyType; 49 50 private List <StringBuffer > values = new ArrayList <StringBuffer >(); 51 private Map <QName, FileWriter > contentWriters = new HashMap <QName, FileWriter >(); 52 53 54 62 public PropertyContext(QName elementName, NodeContext parentContext, QName propertyName, QName propertyType) 63 { 64 super(elementName, parentContext.getDictionaryService(), parentContext.getImporter()); 65 this.parentContext = parentContext; 66 this.propertyName = propertyName; 67 this.propertyType = propertyType; 68 } 69 70 75 public NodeContext getNode() 76 { 77 return parentContext; 78 } 79 80 85 public QName getName() 86 { 87 return propertyName; 88 } 89 90 95 public QName getType() 96 { 97 return propertyType; 98 } 99 100 105 public boolean isMultiValue() 106 { 107 return values.size() > 1; 108 } 109 110 115 public boolean isNull() 116 { 117 return values.size() == 0; 118 } 119 120 125 public List <StringBuffer > getValues() 126 { 127 return values; 128 } 129 130 133 public void startValue() 134 { 135 StringBuffer buffer = new StringBuffer (128); 136 if (propertyType.equals(DataTypeDefinition.CONTENT)) 137 { 138 File tempFile = TempFileProvider.createTempFile("import", ".tmp"); 140 try 141 { 142 FileWriter tempWriter = new FileWriter (tempFile); 143 contentWriters.put(propertyName, tempWriter); 144 ContentData contentData = new ContentData(tempFile.getAbsolutePath(), MimetypeMap.MIMETYPE_BINARY, 0, tempWriter.getEncoding()); 145 buffer.append(contentData.toString()); 146 } 147 catch(IOException e) 148 { 149 throw new ImporterException("Failed to create temporary content holder for property " + propertyName, e); 150 } 151 } 152 values.add(buffer); 153 } 154 155 158 public void endValue() 159 { 160 if (propertyType.equals(DataTypeDefinition.CONTENT)) 161 { 162 FileWriter tempWriter = contentWriters.get(propertyName); 164 try 165 { 166 tempWriter.close(); 167 contentWriters.remove(propertyName); 168 } 169 catch(IOException e) 170 { 171 throw new ImporterException("Failed to create temporary content holder for property " + propertyName, e); 172 } 173 } 174 else 175 { 176 StringBuffer buffer = values.get(values.size() -1); 178 values.set(values.size() -1, new StringBuffer (ISO9075.decode(buffer.toString()))); 179 } 180 } 181 182 189 public void appendCharacters(char[] ch, int start, int length) 190 { 191 if (propertyType.equals(DataTypeDefinition.CONTENT)) 192 { 193 FileWriter tempWriter = contentWriters.get(propertyName); 194 try 195 { 196 tempWriter.write(ch, start, length); 197 } 198 catch(IOException e) 199 { 200 throw new ImporterException("Failed to write temporary content for property " + propertyName, e); 201 } 202 } 203 else 204 { 205 StringBuffer buffer = values.get(values.size() -1); 206 buffer.append(ch, start, length); 207 } 208 } 209 210 } 211 | Popular Tags |