KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > services > ContentletServices


1 package com.dotmarketing.services;
2
3 import java.util.Collections JavaDoc;
4 import java.util.Date JavaDoc;
5 import java.util.Iterator JavaDoc;
6 import java.util.List JavaDoc;
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 /**
27  * @author will
28  */

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         // let's write this puppy out to our file
46
StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
47
48         // CONTENTLET CONTROLS BEGIN
49
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         //set all properties from the contentlet
54
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         //Structure fields
60

61         Structure structure = content.getStructure();
62         List JavaDoc fields = structure.getFields();
63         Iterator JavaDoc 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 JavaDoc contField = field.getFieldContentlet();
72             String JavaDoc contFieldValue = null;
73             Object JavaDoc contFieldValueObject = null;
74             if (UtilMethods.isSet(contField)) {
75                 try {
76                     contFieldValueObject = PropertyUtils.getProperty(content, contField);
77                     contFieldValue = contFieldValueObject == null?"":contFieldValueObject.toString();
78                 } catch (Exception JavaDoc 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 JavaDoc shortFormat = "";
121                 String JavaDoc dbFormat = "";
122                 if (contFieldValueObject != null && contFieldValueObject instanceof Date JavaDoc) {
123                     shortFormat = UtilMethods.dateToHTMLDate((Date JavaDoc) contFieldValueObject, "MM/dd/yyyy");
124                     dbFormat = UtilMethods.dateToHTMLDate((Date JavaDoc) 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 JavaDoc shortFormat = "";
131                 if (contFieldValueObject != null && contFieldValueObject instanceof Date JavaDoc) {
132                     shortFormat = UtilMethods.dateToHTMLDate((Date JavaDoc) 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 JavaDoc shortFormat = "";
138                 String JavaDoc longFormat = "";
139                 String JavaDoc dbFormat = "";
140                 if (contFieldValueObject != null && contFieldValueObject instanceof Date JavaDoc) {
141                     shortFormat = UtilMethods.dateToHTMLDate((Date JavaDoc) contFieldValueObject, "MM/dd/yyyy");
142                     longFormat = UtilMethods.dateToHTMLDate((Date JavaDoc) contFieldValueObject, "MM/dd/yyyy H:mm:ss");
143                     dbFormat = UtilMethods.dateToHTMLDate((Date JavaDoc) 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 JavaDoc categories = "";
156         String JavaDoc categoryNames = "";
157         //get the contentlet categories to make a list
158
List JavaDoc 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         //sets the categories as a list on velocity
173
sb.append("#set( $ContentletCategories =[" + categories + "] )\n");
174         sb.append("#set( $ContentletCategoryNames =[" + categoryNames + "] )\n");
175         
176
177         // This is code is repeated becuase the bug GETTYS-268, the content variables were been overwritten
178
// by the parse inside the some of the content fields
179
// To edit the look, see WEB-INF/velocity/static/preview/content_controls.vtl
180

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 JavaDoc folderPath = (!EDIT_MODE) ? "live" + java.io.File.separator: "working" + java.io.File.separator;
193             String JavaDoc 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 JavaDoc tmpOut = new java.io.BufferedOutputStream JavaDoc(new java.io.FileOutputStream JavaDoc(new java.io.File JavaDoc(
200                     velocityRootPath + folderPath + identifier.getInode() + "_" + content.getLanguageId() + "." + Config.getStringProperty("VELOCITY_CONTENT_EXTENSION"))));
201
202             java.io.StringReader JavaDoc strReader = new java.io.StringReader JavaDoc(sb.toString());
203
204             //writes all data from input in output
205
while ((bytedata = strReader.read()) != -1) {
206                 tmpOut.write(bytedata);
207             }
208
209             tmpOut.close();
210             strReader.close();
211             
212         } catch (Exception JavaDoc e) {
213             Logger.error(ContentletServices.class, e.toString(), e);
214         }
215         
216     }
217     
218     
219     @SuppressWarnings JavaDoc("unchecked")
220     public static List JavaDoc<Contentlet> sortContentlets(List JavaDoc<Contentlet> contentletList, String JavaDoc 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 JavaDoc folderPath = (!EDIT_MODE) ? "live" + java.io.File.separator: "working" + java.io.File.separator;
249         String JavaDoc 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 JavaDoc f = new java.io.File JavaDoc(velocityRootPath + folderPath +
255                 identifier.getInode() + "." +
256                 Config.getStringProperty("VELOCITY_CONTENT_EXTENSION"));
257         f.delete();
258     }
259        
260 }
Popular Tags