1 package com.dotmarketing.services; 2 3 import java.util.Collections ; 4 import java.util.Date ; 5 import java.util.Iterator ; 6 import java.util.List ; 7 8 import org.apache.commons.beanutils.PropertyUtils; 9 10 import com.dotmarketing.beans.Identifier; 11 import com.dotmarketing.comparators.ContentComparator; 12 import com.dotmarketing.comparators.WebAssetSortOrderComparator; 13 import com.dotmarketing.factories.IdentifierFactory; 14 import com.dotmarketing.factories.InodeFactory; 15 import com.dotmarketing.portlets.categories.model.Category; 16 import com.dotmarketing.portlets.contentlet.model.Contentlet; 17 import com.dotmarketing.portlets.files.model.File; 18 import com.dotmarketing.portlets.links.model.Link; 19 import com.dotmarketing.portlets.structure.model.Field; 20 import com.dotmarketing.portlets.structure.model.Structure; 21 import com.dotmarketing.util.Config; 22 import com.dotmarketing.util.Logger; 23 import com.dotmarketing.util.UtilMethods; 24 import com.dotmarketing.util.WebKeys; 25 26 29 public class ContentletServices { 30 31 public static void publishContentletToFile(Contentlet contentlet) { 32 33 Identifier identifier = IdentifierFactory.getParentIdentifier(contentlet); 34 writeContentletToFile(contentlet, identifier, false); 35 } 36 37 public static void writeContentletToFile(Contentlet contentlet, boolean EDIT_MODE) { 38 39 Identifier identifier = IdentifierFactory.getParentIdentifier(contentlet); 40 writeContentletToFile(contentlet, identifier, EDIT_MODE); 41 } 42 43 public static void writeContentletToFile(Contentlet content, Identifier identifier, boolean EDIT_MODE) { 44 45 StringBuffer sb = new StringBuffer (); 47 48 sb.append("#set( $EDIT_CONTENT_PERMISSION =$EDIT_CONTENT_PERMISSION" + identifier.getInode() + " )\n"); 50 sb.append("#set( $CONTENT_INODE =\"" + content.getInode() + "\" )\n"); 51 sb.append("#set( $IDENTIFIER_INODE =\"" + identifier.getInode() + "\" )\n"); 52 53 sb.append("##Set Content properties\n"); 55 sb.append("#set( $ContentInode =\"" + content.getInode() + "\" )\n"); 56 sb.append("#set( $ContentIdentifier =\"" + identifier.getInode() + "\" )\n"); 57 sb.append("#set( $ContentletTitle =\"" + UtilMethods.espaceForVelocity(content.getTitle()) + "\" )\n"); 58 59 61 Structure structure = content.getStructure(); 62 List fields = structure.getFields(); 63 Iterator fieldsIt = fields.iterator(); 64 65 while (fieldsIt.hasNext()) { 66 Field field = (Field) fieldsIt.next(); 67 68 sb.append("\n\n##Set Field " + field.getFieldName() + " properties\n"); 69 70 71 String contField = field.getFieldContentlet(); 72 String contFieldValue = null; 73 Object contFieldValueObject = null; 74 if (UtilMethods.isSet(contField)) { 75 try { 76 contFieldValueObject = PropertyUtils.getProperty(content, contField); 77 contFieldValue = contFieldValueObject == null?"":contFieldValueObject.toString(); 78 } catch (Exception e) { 79 Logger.error(ContentletServices.class, "writeContentletToFile: " + e.getMessage()); 80 } 81 if (!field.getFieldType().equals(WebKeys.TypeField.DATETIME) && 82 !field.getFieldType().equals(WebKeys.TypeField.DATE) && 83 !field.getFieldType().equals(WebKeys.TypeField.TIME)) 84 sb.append("#set( $" + field.getVelocityVarName() + " =\"" + UtilMethods.espaceForVelocity(contFieldValue).trim() + "\" )\n"); 85 } 86 87 if (field.getFieldType().equals(WebKeys.TypeField.TEXT) || field.getFieldType().equals(WebKeys.TypeField.TEXTAREA) || field.getFieldType().equals(WebKeys.TypeField.WYSIWYG)) { 88 sb.append("#set( $" + field.getVelocityVarName() + " =\"#fixBreaks($" + field.getVelocityVarName() + ")\")\n"); 89 } else if (field.getFieldType().equals(WebKeys.TypeField.IMAGE)) { 90 Identifier id = (Identifier) InodeFactory.getChildOfClassByRelationType(content, Identifier.class, field.getFieldRelationType()); 91 File image = (File) IdentifierFactory.getLiveChildOfClass(id, File.class); 92 sb.append("#set( $" + field.getVelocityVarName() + "ImageInode =\"" + image.getInode() + "\" )\n"); 93 sb.append("#set( $" + field.getVelocityVarName() + "ImageWidth =\"" + image.getWidth() + "\" )\n"); 94 sb.append("#set( $" + field.getVelocityVarName() + "ImageHeight =\"" + image.getHeight() + "\" )\n"); 95 sb.append("#set( $" + field.getVelocityVarName() + "ImageExtension =\"" + UtilMethods.espaceForVelocity(image.getExtension()) + "\" )\n"); 96 sb.append("#set( $" + field.getVelocityVarName() + "ImageURI =\"" + UtilMethods.espaceForVelocity(image.getURI()) + "\" )\n"); 97 sb.append("#set( $" + field.getVelocityVarName() + "ImageTitle =\"" + UtilMethods.espaceForVelocity(image.getTitle()) + "\" )\n"); 98 } else if (field.getFieldType().equals(WebKeys.TypeField.FILE)) { 99 Identifier id = (Identifier) InodeFactory.getChildOfClassByRelationType(content, Identifier.class, field.getFieldRelationType()); 100 File file = (File) IdentifierFactory.getLiveChildOfClass(id, File.class); 101 sb.append("#set( $" + field.getVelocityVarName() + "FileInode =\"" + file.getInode() + "\" )\n"); 102 sb.append("#set( $" + field.getVelocityVarName() + "FileExtension =\"" + UtilMethods.espaceForVelocity(file.getExtension()) + "\" )\n"); 103 sb.append("#set( $" + field.getVelocityVarName() + "FileURI =\"" + UtilMethods.espaceForVelocity(file.getURI()) + "\" )\n"); 104 sb.append("#set( $" + field.getVelocityVarName() + "FileTitle =\"" + UtilMethods.espaceForVelocity(file.getTitle()) + "\" )\n"); 105 } else if (field.getFieldType().equals(WebKeys.TypeField.LINK)) { 106 Identifier id = (Identifier) InodeFactory.getChildOfClassByRelationType(content, Identifier.class, field.getFieldRelationType()); 107 Link link = (Link) IdentifierFactory.getLiveChildOfClass(id, Link.class); 108 sb.append("#set( $" + field.getVelocityVarName() + "LinkInode =\"" + link.getInode() + "\" )\n"); 109 sb.append("#set( $" + field.getVelocityVarName() + "LinkURL =\"" + UtilMethods.espaceForVelocity(link.getUrl()) + "\" )\n"); 110 sb.append("#set( $" + field.getVelocityVarName() + "LinkProtocol =\"" + UtilMethods.espaceForVelocity(link.getProtocal()) + "\" )\n"); 111 sb.append("#set( $" + field.getVelocityVarName() + "LinkTitle =\"" + UtilMethods.espaceForVelocity(link.getTitle()) + "\" )\n"); 112 sb.append("#set( $" + field.getVelocityVarName() + "LinkTarget =\"" + link.getTarget() + "\" )\n"); 113 } else if (field.getFieldType().equals(WebKeys.TypeField.SELECT)) { 114 sb.append("#set( $" + field.getVelocityVarName() + "SelectLabelsValues = \"" + field.getValues().replaceAll("\\r\\n", " ").replaceAll("\\n", " ") + "\")\n"); 115 } else if (field.getFieldType().equals(WebKeys.TypeField.RADIO)) { 116 sb.append("#set( $" + field.getVelocityVarName() + "RadioLabelsValues = \"" + field.getValues().replaceAll("\\r\\n", " ").replaceAll("\\n", " ") + "\" )\n"); 117 } else if (field.getFieldType().equals(WebKeys.TypeField.CHECKBOX)) { 118 sb.append("#set( $" + field.getVelocityVarName() + "CheckboxLabelsValues = \"" + field.getValues().replaceAll("\\r\\n", " ").replaceAll("\\n", " ") + "\" )\n"); 119 } else if (field.getFieldType().equals(WebKeys.TypeField.DATE)) { 120 String shortFormat = ""; 121 String dbFormat = ""; 122 if (contFieldValueObject != null && contFieldValueObject instanceof Date ) { 123 shortFormat = UtilMethods.dateToHTMLDate((Date ) contFieldValueObject, "MM/dd/yyyy"); 124 dbFormat = UtilMethods.dateToHTMLDate((Date ) contFieldValueObject, "yyyy-MM-dd"); 125 } 126 sb.append("#set( $" + field.getVelocityVarName() + " = $date.toDate(\"yyyy-MM-dd\", \"" + dbFormat + "\"))\n"); 127 sb.append("#set( $" + field.getVelocityVarName() + "ShortFormat =\"" + shortFormat + "\" )\n"); 128 sb.append("#set( $" + field.getVelocityVarName() + "DBFormat =\"" + dbFormat + "\" )\n"); 129 } else if (field.getFieldType().equals(WebKeys.TypeField.TIME)) { 130 String shortFormat = ""; 131 if (contFieldValueObject != null && contFieldValueObject instanceof Date ) { 132 shortFormat = UtilMethods.dateToHTMLDate((Date ) contFieldValueObject, "H:mm:ss"); 133 } 134 sb.append("#set( $" + field.getVelocityVarName() + "ShortFormat =\"" + shortFormat + "\" )\n"); 135 sb.append("#set( $" + field.getVelocityVarName() + " = $date.toDate(\"H:mm:ss\", \"" + shortFormat + "\"))\n"); 136 } else if (field.getFieldType().equals(WebKeys.TypeField.DATETIME)) { 137 String shortFormat = ""; 138 String longFormat = ""; 139 String dbFormat = ""; 140 if (contFieldValueObject != null && contFieldValueObject instanceof Date ) { 141 shortFormat = UtilMethods.dateToHTMLDate((Date ) contFieldValueObject, "MM/dd/yyyy"); 142 longFormat = UtilMethods.dateToHTMLDate((Date ) contFieldValueObject, "MM/dd/yyyy H:mm:ss"); 143 dbFormat = UtilMethods.dateToHTMLDate((Date ) contFieldValueObject, "yyyy-MM-dd H:mm:ss"); 144 } 145 sb.append("#set( $" + field.getVelocityVarName() + " = $date.toDate(\"yyyy-MM-dd H:mm:ss\", \"" + dbFormat + "\"))\n"); 146 sb.append("#set( $" + field.getVelocityVarName() + "ShortFormat =\"" + shortFormat + "\" )\n"); 147 sb.append("#set( $" + field.getVelocityVarName() + "LongFormat =\"" + longFormat + "\" )\n"); 148 sb.append("#set( $" + field.getVelocityVarName() + "DBFormat =\"" + dbFormat + "\" )\n"); 149 } else if (field.getFieldType().equals(WebKeys.TypeField.BUTTON)) { 150 sb.append("#set( $" + field.getVelocityVarName() + "ButtonValue =\"" + (field.getFieldName() == null?"":field.getFieldName()) + "\" )\n"); 151 sb.append("#set( $" + field.getVelocityVarName() + "ButtonCode =\"" + (field.getValues() == null?"":field.getValues()) + "\" )\n"); 152 } 153 } 154 155 String categories = ""; 156 String categoryNames = ""; 157 List categoryList = InodeFactory.getParentsOfClass(content,Category.class); 159 if (categoryList!=null) { 160 for (int i=0;i<categoryList.size();i++) { 161 Category category = (Category) categoryList.get(i); 162 categories += category.getInode(); 163 categoryNames += "\"" + category.getCategoryName() + "\""; 164 if (i!=(categoryList.size()-1)) { 165 categories += ","; 166 categoryNames += ","; 167 } 168 } 169 } 170 171 172 sb.append("#set( $ContentletCategories =[" + categories + "] )\n"); 174 sb.append("#set( $ContentletCategoryNames =[" + categoryNames + "] )\n"); 175 176 177 181 sb.append("#set( $EDIT_CONTENT_PERMISSION =$EDIT_CONTENT_PERMISSION" + identifier.getInode() + " )\n"); 182 sb.append("#set( $CONTENT_INODE =\"" + content.getInode() + "\" )\n"); 183 sb.append("#set( $IDENTIFIER_INODE =\"" + identifier.getInode() + "\" )\n"); 184 sb.append("##Set Content properties\n"); 185 sb.append("#set( $ContentInode =\"" + content.getInode() + "\" )\n"); 186 sb.append("#set( $ContentIdentifier =\"" + identifier.getInode() + "\" )\n"); 187 sb.append("#set( $ContentletTitle =\"" + UtilMethods.espaceForVelocity(content.getTitle()) + "\" )\n"); 188 189 try { 190 int bytedata; 191 192 String folderPath = (!EDIT_MODE) ? "live" + java.io.File.separator: "working" + java.io.File.separator; 193 String velocityRootPath = Config.getStringProperty("VELOCITY_ROOT"); 194 if (velocityRootPath.startsWith("/WEB-INF")) { 195 velocityRootPath = Config.CONTEXT.getRealPath(velocityRootPath); 196 } 197 velocityRootPath += java.io.File.separator; 198 199 java.io.BufferedOutputStream tmpOut = new java.io.BufferedOutputStream (new java.io.FileOutputStream (new java.io.File ( 200 velocityRootPath + folderPath + identifier.getInode() + "_" + content.getLanguageId() + "." + Config.getStringProperty("VELOCITY_CONTENT_EXTENSION")))); 201 202 java.io.StringReader strReader = new java.io.StringReader (sb.toString()); 203 204 while ((bytedata = strReader.read()) != -1) { 206 tmpOut.write(bytedata); 207 } 208 209 tmpOut.close(); 210 strReader.close(); 211 212 } catch (Exception e) { 213 Logger.error(ContentletServices.class, e.toString(), e); 214 } 215 216 } 217 218 219 @SuppressWarnings ("unchecked") 220 public static List <Contentlet> sortContentlets(List <Contentlet> contentletList, String sortBy) { 221 222 Logger.debug(ContentletServices.class, "I'm ordering by " + sortBy); 223 224 if (sortBy.equals("tree_order")) { 225 Collections.sort(contentletList,new WebAssetSortOrderComparator()); 226 } 227 else { 228 Collections.sort(contentletList,new ContentComparator("asc")); 229 } 230 231 return contentletList; 232 233 } 234 235 public static void unpublishContentletFile(Contentlet asset) { 236 237 Identifier identifier = IdentifierFactory.getParentIdentifier(asset); 238 removeContentletFile(asset, identifier, false); 239 } 240 241 public static void removeContentletFile(Contentlet asset, boolean EDIT_MODE) { 242 243 Identifier identifier = IdentifierFactory.getParentIdentifier(asset); 244 removeContentletFile(asset, identifier, EDIT_MODE); 245 } 246 247 public static void removeContentletFile (Contentlet asset, Identifier identifier, boolean EDIT_MODE) { 248 String folderPath = (!EDIT_MODE) ? "live" + java.io.File.separator: "working" + java.io.File.separator; 249 String velocityRootPath = Config.getStringProperty("VELOCITY_ROOT"); 250 if (velocityRootPath.startsWith("/WEB-INF")) { 251 velocityRootPath = Config.CONTEXT.getRealPath(velocityRootPath); 252 } 253 velocityRootPath += java.io.File.separator; 254 java.io.File f = new java.io.File (velocityRootPath + folderPath + 255 identifier.getInode() + "." + 256 Config.getStringProperty("VELOCITY_CONTENT_EXTENSION")); 257 f.delete(); 258 } 259 260 } | Popular Tags |