From: zapata Date: Mon, 13 May 2002 20:53:54 +0000 (+0000) Subject: yet another rewrite of the producers... X-Git-Tag: prexmlproducerconfig~83 X-Git-Url: http://erislabs.net/gitweb/?p=mir.git;a=commitdiff_plain;h=d569d798e661543ad2618e626c4d0f32ec6bfdaf yet another rewrite of the producers... --- diff --git a/source/Mir.java b/source/Mir.java index 77412c05..c70f42aa 100755 --- a/source/Mir.java +++ b/source/Mir.java @@ -327,6 +327,7 @@ public class Mir extends AbstractServlet { HTMLTemplateProcessor.process(res, startTemplate, mergeData, out, getLocale(req)); } catch (Exception e) { + e.printStackTrace(System.out); handleError(req, res, out, "error while trying to send startpage. " + e.toString()); } } diff --git a/source/mir/entity/EntityBrowser.java b/source/mir/entity/EntityBrowser.java index aa3f3cc5..5a05e18e 100755 --- a/source/mir/entity/EntityBrowser.java +++ b/source/mir/entity/EntityBrowser.java @@ -1,9 +1,11 @@ package mir.entity; +import java.util.*; +import mir.util.*; import mir.storage.*; import mir.entity.*; -public class EntityBrowser { +public class EntityBrowser implements RewindableIterator { private StorageObject storage; private String whereClause; @@ -25,11 +27,14 @@ public class EntityBrowser { rewind(); } - private void rewind() throws StorageObjectException { - currentBatch = storage.selectByWhereClause(whereClause, orderByClause, - 0, batchSize); - - position=0; + public void rewind() { + try { + currentBatch = storage.selectByWhereClause(whereClause, orderByClause, 0, batchSize); + position=0; + } + catch (Throwable t) { + throw new RuntimeException(t.getMessage()); + } } private void readNextBatch() throws StorageObjectException { @@ -40,23 +45,37 @@ public class EntityBrowser { } } - public boolean hasNext() throws StorageObjectException { - if (position>=currentBatch.size() && currentBatch.hasNextBatch()) { - readNextBatch(); - } + public boolean hasNext() { + try { + if (position>=currentBatch.size() && currentBatch.hasNextBatch()) { + readNextBatch(); + } - return (position0 && cache.size()>=maximumLength) ; + } + } + catch (Throwable t) { + throw new RuntimeException(t.getMessage()); + } + + } + + private void exhaust() { + skip(); + + while (!exhausted) + fetchNext(); + } + + private void fetchUntil(int anIndex) { + skip(); + + while (!exhausted && anIndex>=cache.size()) + fetchNext(); + } + + public int size() { + exhaust(); + + return cache.size(); + } + + public Object get(int anIndex) { + fetchUntil(anIndex); + return cache.get(anIndex); + } +} \ No newline at end of file diff --git a/source/mir/generator/FreemarkerGenerator.java b/source/mir/generator/FreemarkerGenerator.java index aeab5244..da383aa8 100755 --- a/source/mir/generator/FreemarkerGenerator.java +++ b/source/mir/generator/FreemarkerGenerator.java @@ -1,9 +1,10 @@ package mir.generator; -import freemarker.template.*; -import mir.entity.*; import java.util.*; import java.io.*; +import freemarker.template.*; +import mir.entity.*; +import mir.util.*; public class FreemarkerGenerator implements Generator { private Template template; @@ -26,11 +27,11 @@ public class FreemarkerGenerator implements Generator { return new MapAdapter(aMap); } - private static TemplateListModel makeListAdapter(List aList) { - return new ListAdapter(aList); + private static TemplateListModel makeIteratorAdapter(Iterator anIterator) { + return new IteratorAdapter(anIterator); } - private static TemplateModel makeAdapter(Object anObject) { + private static TemplateModel makeAdapter(Object anObject) throws TemplateModelException { if (anObject == null) return null; if (anObject instanceof TemplateModel) @@ -39,10 +40,10 @@ public class FreemarkerGenerator implements Generator { return makeStringAdapter((String) anObject); else if (anObject instanceof Map) return makeMapAdapter((Map) anObject); - else if (anObject instanceof List) - return makeListAdapter((List) anObject); + else if (anObject instanceof Iterator) + return makeIteratorAdapter((Iterator) anObject); else - return null; + throw new TemplateModelException("Unadaptable class: " + anObject.getClass().getName()); } private static class MapAdapter implements TemplateModelRoot { @@ -80,6 +81,75 @@ public class FreemarkerGenerator implements Generator { } } + private static class IteratorAdapter implements TemplateListModel { + Iterator iterator; + List valuesCache; + int position; + + private IteratorAdapter(Iterator anIterator) { + iterator = anIterator; + + valuesCache = new Vector(); + position=0; + + + if (iterator instanceof RewindableIterator) { + ((RewindableIterator) iterator).rewind(); + } + } + + public boolean isEmpty() { + return valuesCache.isEmpty() && !iterator.hasNext(); + } + + private void getUntil(int anIndex) throws TemplateModelException { + while (valuesCache.size()<=anIndex && iterator.hasNext()) + { + valuesCache.add(makeAdapter(iterator.next())); + } + }; + + public TemplateModel get(int anIndex) throws TemplateModelException { + TemplateModel result; + + getUntil(anIndex); + + if (anIndex=valuesCache.size() && i0 ) { + returnField=StringUtil.deleteForbiddenTags(returnField); + //create http-links and email-links + if (getValue("is_html").equals("0")) { + returnField = StringUtil.createHTML(returnField,mirconf_imageRoot, + mirconf_mailLinkName,mirconf_extLinkName, + mirconf_intLinkName); + } + returnField = StringUtil.decodeHTMLinTags(returnField); + } + return returnField; + } + + private String getDescriptionSentence() { + String returnField = getValue("description"); + if (returnField != null && returnField.length()>0) { + returnField = StringUtil.removeHTMLTags(returnField); + int endOfFirstSentence=StringUtil.findEndOfSentence(returnField,0); + if (endOfFirstSentence > 0){ + returnField = returnField.substring(0,endOfFirstSentence); + } + } + return returnField; + } + + private String getDescriptionParsed() { + String returnField = getValue("description"); + if (returnField != null && returnField.length()>0) { + returnField = StringUtil.deleteForbiddenTags(returnField); + if (getValue("is_html").equals("0")) { + returnField = StringUtil.createHTML(returnField,mirconf_imageRoot, + mirconf_mailLinkName,mirconf_extLinkName, + mirconf_intLinkName); + } + returnField = StringUtil.decodeHTMLinTags(returnField); + } + return returnField; + } + + + private EntityList getComments() throws StorageObjectException { + return ((DatabaseContent)theStorageObject).getComments(this); + } + + // @todo this needs to optimized. expensive SQL + private SimpleHash getUploadedMediaForNewswire() + throws StorageObjectException, TemplateModelException + { + // fetching/setting the images + // return to_media_icons + String tinyIcon = null, iconAlt = null; + MirMedia mediaHandler = null; + EntityUploadedMedia uploadedMedia; + Entity mediaType; + SimpleHash returnHash = new SimpleHash(); + + EntityList upMediaEntityList = + DatabaseContentToMedia.getInstance().getUploadedMedia(this); + if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) { + + for (int n=0; n < upMediaEntityList.size();n++) { + uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n); + mediaType = uploadedMedia.getMediaType(); + try { + mediaHandler = MediaHelper.getHandler( mediaType ); + } catch (MirMediaException ex) { + throw new TemplateModelException(ex.toString()); + } + //the "best" media type to show + if (mediaHandler.isVideo()) { + tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo"); + iconAlt = "Video"; + break; + } else if (mediaHandler.isAudio()) { + tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio"); + iconAlt = "Audio"; + } else if (tinyIcon == null && !mediaHandler.isImage()) { + tinyIcon = mediaHandler.getTinyIcon(); + iconAlt = mediaHandler.getIconAlt(); + } + + } + //it only has image(s) + if (tinyIcon == null) { + tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage"); + iconAlt = "Image"; + } + // uploadedMedia Entity list is empty. + // we only have text + } else { + tinyIcon = MirConfig.getProp("Producer.Icon.TinyText"); + iconAlt = "Text"; + } + returnHash.put("tiny_icon", mirconf_imageRoot+"/"+tinyIcon); + returnHash.put("icon_alt", iconAlt); + return returnHash; + } + + private boolean hasMedia() throws StorageObjectException + { + if (_hasMedia == null) { + _hasMedia = + new Boolean(DatabaseContentToMedia.getInstance().hasMedia(this)); + } + return _hasMedia.booleanValue(); + } + + //######## @todo all of the following getBlahForContent should have + // and optimized version where LIMIT=1 sql for list view. + private EntityList getImagesForContent() + throws StorageObjectException, TemplateModelException + { + if (hasMedia()) + return DatabaseContentToMedia.getInstance().getImages(this); + else + return null; + } + + private EntityList getAudioForContent() + throws StorageObjectException, TemplateModelException + { + if (hasMedia()) + return DatabaseContentToMedia.getInstance().getAudio(this) ; + else + return null; + } + + private EntityList getVideoForContent() + throws StorageObjectException, TemplateModelException + { + if (hasMedia()) + return DatabaseContentToMedia.getInstance().getVideo(this) ; + else + return null; + } + + private EntityList getOtherMediaForContent() + throws StorageObjectException, TemplateModelException + { + if (hasMedia()) + return DatabaseContentToMedia.getInstance().getOther(this); + else + return null; + } + +} +*/ + + + + + + + + + + + + +// if (field.equals("date_formatted")) +// { +// if (hasValueForField("webdb_create")) +// returnField = StringUtil.dateToReadableDate(getValue("webdb_create")); + + +// else if (field.equals("description_parsed")) { +// /** @todo the config stuff should be moved to StringUtil */ +// String extLinkName = MirConfig.getProp("Producer.ExtLinkName"); +// String intLinkName = MirConfig.getProp("Producer.IntLinkName"); +// String mailLinkName = MirConfig.getProp("Producer.MailLinkName"); +// String imageRoot = MirConfig.getProp("Producer.ImageRoot"); +// returnField = StringUtil.createHTML(getValue("description"),imageRoot,mailLinkName,extLinkName,intLinkName); diff --git a/source/mircoders/entity/adapter/ContentAdapterDefinition.java b/source/mircoders/entity/adapter/ContentAdapterDefinition.java new file mode 100755 index 00000000..d5062e0a --- /dev/null +++ b/source/mircoders/entity/adapter/ContentAdapterDefinition.java @@ -0,0 +1,320 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; +import mircoders.global.*; +import mircoders.localizer.*; + +public class ContentAdapterDefinition extends EntityAdapterDefinition { + private static ContentAdapterDefinition instance; + + public static ContentAdapterDefinition getInstance() { + synchronized (ContentAdapterDefinition.class) { + if (instance == null) { + instance = new ContentAdapterDefinition(); + } + return instance; + } + } + + public ContentAdapterDefinition() { + super(); + + addDateField("date", "date"); + addCalculatedField("to_topics", new ContentToTopicsField()); + addCalculatedField("to_comments", new ContentToCommentsField()); + addCalculatedField("description_parsed", new FilteredField("description")); + addCalculatedField("content_data_parsed", new FilteredField("content_data")); +// else if (field.equals("")) +// returnField = getDescriptionParsed(); +// else if (field.equals("description_sentence")) +// returnField = getDescriptionSentence(); +// else if (field.equals("content_data_parsed")) +// returnField = getContentDataParsed(); + } + + private class FilteredField implements CalculatedField { + String fieldName; + + public FilteredField(String aFieldName) { + fieldName = aFieldName; + } + + public Object getValue(EntityAdapter anEntityAdapter) { + if (anEntityAdapter.get("is_html").equals("0")) { + return MirGlobal.localizer().producerTool().filterText((String) anEntityAdapter.get(fieldName)); + } + else { + return anEntityAdapter.get(fieldName); + } + } + } + + private class ContentToCommentsField implements CalculatedField { + public Object getValue(EntityAdapter anEntityAdapter) { + try { + return getRelation( + DatabaseComment.getInstance(), + "to_media="+anEntityAdapter.get("id"), + "title", + CommentAdapterDefinition.getInstance()); + } + catch (Throwable t) { + throw new RuntimeException(t.getMessage()); + } + } + } + + private class ContentToTopicsField implements CalculatedField { + public Object getValue(EntityAdapter anEntityAdapter) { + try { + return getRelation( + DatabaseTopics.getInstance(), + "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)", + "title", + TopicsAdapterDefinition.getInstance()); + } + catch (Throwable t) { + throw new RuntimeException(t.getMessage()); + } + } + } +} + + +// String mirconf_extLinkName = MirConfig.getProp("Producer.ExtLinkName"); +// String mirconf_intLinkName = MirConfig.getProp("Producer.IntLinkName"); +// String mirconf_mailLinkName = MirConfig.getProp("Producer.MailLinkName"); +// String mirconf_imageRoot = MirConfig.getProp("Producer.ImageRoot"); + + +// if (field.equals("date_formatted")) +// { +// if (hasValueForField("date")) +// returnField = StringUtil.webdbDate2readableDate(getValue("date")); +// } +// else if (field.equals("description_parsed")) +// returnField = getDescriptionParsed(); +// else if (field.equals("description_sentence")) +// returnField = getDescriptionSentence(); +// else if (field.equals("content_data_parsed")) +// returnField = getContentDataParsed(); + + +// if (key.equals("to_media_images")) { +// try { +// _entCache.put(key, getImagesForContent()); +// return (TemplateModel)_entCache.get(key); +// } +// catch (Exception ex) { +// theLog.printWarning("-- getImagesForContent: could not fetch data " + ex.toString()); +// throw new TemplateModelException(ex.toString()); +// } +// } +// if (key.equals("to_media_audio")) { +// try { +//// _entCache.put(key, getAudioForContent()); +// return (TemplateModel)_entCache.get(key); +// } +// catch (Exception ex) { +// theLog.printWarning("-- getAudioForContent: could not fetch data " + ex.toString()); +// throw new TemplateModelException(ex.toString()); +// } +// } +// if (key.equals("to_media_video")) { +// try { +// _entCache.put(key, getVideoForContent()); +/* return (TemplateModel)_entCache.get(key); + } + catch (Exception ex) { + theLog.printWarning("-- getVideoForContent: could not fetch data " + ex.toString()); + throw new TemplateModelException(ex.toString()); + } + } + if (key.equals("to_media_other")) { + try { + _entCache.put(key, getOtherMediaForContent()); + return (TemplateModel)_entCache.get(key); + } + catch (Exception ex) { + theLog.printWarning("-- getOtherMediaForContent: could not fetch data " + ex.toString()); + throw new TemplateModelException(ex.toString()); + } + } + else if (key.equals("to_media_icon")) { + try { + _entCache.put(key, getUploadedMediaForNewswire()); + return (TemplateModel)_entCache.get(key); + } + catch (Exception ex) { + theLog.printWarning("-- getUploadedMediaForNewswire: could not fetch data " + ex.toString()); + throw new TemplateModelException(ex.toString()); + } + } + else if (key.equals("to_topics")) { + try { + _entCache.put(key, + DatabaseContentToTopics.getInstance().getTopics(this)); + return (TemplateModel)_entCache.get(key); + } + catch (Exception ex) { + theLog.printWarning("-- getTopics: could not fetch data " + ex.toString()); + throw new TemplateModelException(ex.toString()); + } + } +*/ + + + + +/* + private String getContentDataParsed() { + String returnField = getValue("content_data"); + if (returnField!=null & returnField.length()>0 ) { + returnField=StringUtil.deleteForbiddenTags(returnField); + //create http-links and email-links + if (getValue("is_html").equals("0")) { + returnField = StringUtil.createHTML(returnField,mirconf_imageRoot, + mirconf_mailLinkName,mirconf_extLinkName, + mirconf_intLinkName); + } + returnField = StringUtil.decodeHTMLinTags(returnField); + } + return returnField; + } + + private String getDescriptionSentence() { + String returnField = getValue("description"); + if (returnField != null && returnField.length()>0) { + returnField = StringUtil.removeHTMLTags(returnField); + int endOfFirstSentence=StringUtil.findEndOfSentence(returnField,0); + if (endOfFirstSentence > 0){ + returnField = returnField.substring(0,endOfFirstSentence); + } + } + return returnField; + } + + private String getDescriptionParsed() { + String returnField = getValue("description"); + if (returnField != null && returnField.length()>0) { + returnField = StringUtil.deleteForbiddenTags(returnField); + if (getValue("is_html").equals("0")) { + returnField = StringUtil.createHTML(returnField,mirconf_imageRoot, + mirconf_mailLinkName,mirconf_extLinkName, + mirconf_intLinkName); + } + returnField = StringUtil.decodeHTMLinTags(returnField); + } + return returnField; + } + + + private EntityList getComments() throws StorageObjectException { + return ((DatabaseContent)theStorageObject).getComments(this); + } + + // @todo this needs to optimized. expensive SQL + private SimpleHash getUploadedMediaForNewswire() + throws StorageObjectException, TemplateModelException + { + // fetching/setting the images + // return to_media_icons + String tinyIcon = null, iconAlt = null; + MirMedia mediaHandler = null; + EntityUploadedMedia uploadedMedia; + Entity mediaType; + SimpleHash returnHash = new SimpleHash(); + + EntityList upMediaEntityList = + DatabaseContentToMedia.getInstance().getUploadedMedia(this); + if (upMediaEntityList!=null && upMediaEntityList.getCount()>=1) { + + for (int n=0; n < upMediaEntityList.size();n++) { + uploadedMedia = (EntityUploadedMedia)upMediaEntityList.elementAt(n); + mediaType = uploadedMedia.getMediaType(); + try { + mediaHandler = MediaHelper.getHandler( mediaType ); + } catch (MirMediaException ex) { + throw new TemplateModelException(ex.toString()); + } + //the "best" media type to show + if (mediaHandler.isVideo()) { + tinyIcon = MirConfig.getProp("Producer.Icon.TinyVideo"); + iconAlt = "Video"; + break; + } else if (mediaHandler.isAudio()) { + tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio"); + iconAlt = "Audio"; + } else if (tinyIcon == null && !mediaHandler.isImage()) { + tinyIcon = mediaHandler.getTinyIcon(); + iconAlt = mediaHandler.getIconAlt(); + } + + } + //it only has image(s) + if (tinyIcon == null) { + tinyIcon = MirConfig.getProp("Producer.Icon.TinyImage"); + iconAlt = "Image"; + } + // uploadedMedia Entity list is empty. + // we only have text + } else { + tinyIcon = MirConfig.getProp("Producer.Icon.TinyText"); + iconAlt = "Text"; + } + returnHash.put("tiny_icon", mirconf_imageRoot+"/"+tinyIcon); + returnHash.put("icon_alt", iconAlt); + return returnHash; + } + + private boolean hasMedia() throws StorageObjectException + { + if (_hasMedia == null) { + _hasMedia = + new Boolean(DatabaseContentToMedia.getInstance().hasMedia(this)); + } + return _hasMedia.booleanValue(); + } + + //######## @todo all of the following getBlahForContent should have + // and optimized version where LIMIT=1 sql for list view. + private EntityList getImagesForContent() + throws StorageObjectException, TemplateModelException + { + if (hasMedia()) + return DatabaseContentToMedia.getInstance().getImages(this); + else + return null; + } + + private EntityList getAudioForContent() + throws StorageObjectException, TemplateModelException + { + if (hasMedia()) + return DatabaseContentToMedia.getInstance().getAudio(this) ; + else + return null; + } + + private EntityList getVideoForContent() + throws StorageObjectException, TemplateModelException + { + if (hasMedia()) + return DatabaseContentToMedia.getInstance().getVideo(this) ; + else + return null; + } + + private EntityList getOtherMediaForContent() + throws StorageObjectException, TemplateModelException + { + if (hasMedia()) + return DatabaseContentToMedia.getInstance().getOther(this); + else + return null; + } + +} +*/ \ No newline at end of file diff --git a/source/mircoders/entity/adapter/FeatureAdapterDefinition.java b/source/mircoders/entity/adapter/FeatureAdapterDefinition.java new file mode 100755 index 00000000..0e98f58d --- /dev/null +++ b/source/mircoders/entity/adapter/FeatureAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class FeatureAdapterDefinition extends EntityAdapterDefinition { + private static FeatureAdapterDefinition instance; + + public static FeatureAdapterDefinition getInstance() { + synchronized (FeatureAdapterDefinition.class) { + if (instance == null) { + instance = new FeatureAdapterDefinition(); + } + return instance; + } + } + + public FeatureAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/ImagesAdapterDefinition.java b/source/mircoders/entity/adapter/ImagesAdapterDefinition.java new file mode 100755 index 00000000..c8a4c9c2 --- /dev/null +++ b/source/mircoders/entity/adapter/ImagesAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class ImagesAdapterDefinition extends EntityAdapterDefinition { + private static ImagesAdapterDefinition instance; + + public static ImagesAdapterDefinition getInstance() { + synchronized (ImagesAdapterDefinition.class) { + if (instance == null) { + instance = new ImagesAdapterDefinition(); + } + return instance; + } + } + + public ImagesAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/LanguageAdapterDefinition.java b/source/mircoders/entity/adapter/LanguageAdapterDefinition.java new file mode 100755 index 00000000..7a49217a --- /dev/null +++ b/source/mircoders/entity/adapter/LanguageAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class LanguageAdapterDefinition extends EntityAdapterDefinition { + private static LanguageAdapterDefinition instance; + + public static LanguageAdapterDefinition getInstance() { + synchronized (LanguageAdapterDefinition.class) { + if (instance == null) { + instance = new LanguageAdapterDefinition(); + } + return instance; + } + } + + public LanguageAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/LinksImcsAdapterDefinition.java b/source/mircoders/entity/adapter/LinksImcsAdapterDefinition.java new file mode 100755 index 00000000..9c66c624 --- /dev/null +++ b/source/mircoders/entity/adapter/LinksImcsAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class LinksImcsAdapterDefinition extends EntityAdapterDefinition { + private static LinksImcsAdapterDefinition instance; + + public static LinksImcsAdapterDefinition getInstance() { + synchronized (LinksImcsAdapterDefinition.class) { + if (instance == null) { + instance = new LinksImcsAdapterDefinition(); + } + return instance; + } + } + + public LinksImcsAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/MediaAdapterDefinition.java b/source/mircoders/entity/adapter/MediaAdapterDefinition.java new file mode 100755 index 00000000..70d078ed --- /dev/null +++ b/source/mircoders/entity/adapter/MediaAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class MediaAdapterDefinition extends EntityAdapterDefinition { + private static MediaAdapterDefinition instance; + + public static MediaAdapterDefinition getInstance() { + synchronized (MediaAdapterDefinition.class) { + if (instance == null) { + instance = new MediaAdapterDefinition(); + } + return instance; + } + } + + public MediaAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/OtherAdapterDefinition.java b/source/mircoders/entity/adapter/OtherAdapterDefinition.java new file mode 100755 index 00000000..33ab0ec0 --- /dev/null +++ b/source/mircoders/entity/adapter/OtherAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class OtherAdapterDefinition extends EntityAdapterDefinition { + private static OtherAdapterDefinition instance; + + public static OtherAdapterDefinition getInstance() { + synchronized (OtherAdapterDefinition.class) { + if (instance == null) { + instance = new OtherAdapterDefinition(); + } + return instance; + } + } + + public OtherAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/TopicsAdapterDefinition.java b/source/mircoders/entity/adapter/TopicsAdapterDefinition.java new file mode 100755 index 00000000..71147005 --- /dev/null +++ b/source/mircoders/entity/adapter/TopicsAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class TopicsAdapterDefinition extends EntityAdapterDefinition { + private static TopicsAdapterDefinition instance; + + public static TopicsAdapterDefinition getInstance() { + synchronized (TopicsAdapterDefinition.class) { + if (instance == null) { + instance = new TopicsAdapterDefinition(); + } + return instance; + } + } + + public TopicsAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/UploadedMediaAdapterDefinition.java b/source/mircoders/entity/adapter/UploadedMediaAdapterDefinition.java new file mode 100755 index 00000000..4a2d3a16 --- /dev/null +++ b/source/mircoders/entity/adapter/UploadedMediaAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class UploadedMediaAdapterDefinition extends EntityAdapterDefinition { + private static UploadedMediaAdapterDefinition instance; + + public static UploadedMediaAdapterDefinition getInstance() { + synchronized (UploadedMediaAdapterDefinition.class) { + if (instance == null) { + instance = new UploadedMediaAdapterDefinition(); + } + return instance; + } + } + + public UploadedMediaAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/UsersAdapterDefinition.java b/source/mircoders/entity/adapter/UsersAdapterDefinition.java new file mode 100755 index 00000000..b54ca739 --- /dev/null +++ b/source/mircoders/entity/adapter/UsersAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class UsersAdapterDefinition extends EntityAdapterDefinition { + private static UsersAdapterDefinition instance; + + public static UsersAdapterDefinition getInstance() { + synchronized (UsersAdapterDefinition.class) { + if (instance == null) { + instance = new UsersAdapterDefinition(); + } + return instance; + } + } + + public UsersAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/entity/adapter/VideoAdapterDefinition.java b/source/mircoders/entity/adapter/VideoAdapterDefinition.java new file mode 100755 index 00000000..1435b382 --- /dev/null +++ b/source/mircoders/entity/adapter/VideoAdapterDefinition.java @@ -0,0 +1,22 @@ +package mircoders.entity.adapter; + +import mir.entity.*; +import mir.entity.adapter.*; +import mircoders.storage.*; + +public class VideoAdapterDefinition extends EntityAdapterDefinition { + private static VideoAdapterDefinition instance; + + public static VideoAdapterDefinition getInstance() { + synchronized (VideoAdapterDefinition.class) { + if (instance == null) { + instance = new VideoAdapterDefinition(); + } + return instance; + } + } + + public VideoAdapterDefinition() { + super(); + } +} diff --git a/source/mircoders/global/MirGlobal.java b/source/mircoders/global/MirGlobal.java index cbbea021..28a4a3bc 100755 --- a/source/mircoders/global/MirGlobal.java +++ b/source/mircoders/global/MirGlobal.java @@ -3,21 +3,42 @@ package mircoders.global; import mir.misc.*; import mircoders.localizer.*; -import mircoders.localizer.basic.*; - - public class MirGlobal { static private MirConfig configuration; static private MirLocalizer localizer; static private ProducerEngine producerEngine; public static MirLocalizer localizer() { + String localizerClassName; + Class localizerClass; + if (localizer == null ) { - localizer = new MirCachingLocalizerDecorator(new MirBasicLocalizer()); + synchronized(MirGlobal.class) { + if (localizer == null ) { + localizerClassName = getConfigPropertyWithDefault("Mir.Localizer", "mirlocal.loaclizer.basic.MirBasicLocalizer"); + + try { + localizerClass = Class.forName(localizerClassName); + } + catch (Throwable t) { + throw new ConfigException("localizer class '" + localizerClassName + "' not found: " + t.toString()); + } + + if (!(MirLocalizer.class.isAssignableFrom(localizerClass))) + throw new ConfigException("localizer class '" + localizerClassName + "' is not assignable from MirLocalizer"); + + try { + localizer = new MirCachingLocalizerDecorator((MirLocalizer) localizerClass.newInstance()); + } + catch (Throwable t) { + throw new ConfigException("localizer class '" + localizerClassName + "' cannot be instantiated: " + t.toString()); + } + } + } } return localizer; - }; + } public static MirConfig config() { if (configuration == null) { @@ -25,7 +46,7 @@ public class MirGlobal { } return configuration; - }; + } public static ProducerEngine producerEngine() { if (producerEngine == null) { @@ -35,6 +56,17 @@ public class MirGlobal { return producerEngine; } + public static String getConfigPropertyWithDefault(String aPropertyName, String aDefault) { + String result; + + result = config().getProp(aPropertyName); + + if (result==null) + result = aDefault; + + return result; + } + public static String getConfigProperty(String aPropertyName) { String result; diff --git a/source/mircoders/localizer/MirProducerToolLocalizer.java b/source/mircoders/localizer/MirProducerToolLocalizer.java index a9bf8239..6b2af6cf 100755 --- a/source/mircoders/localizer/MirProducerToolLocalizer.java +++ b/source/mircoders/localizer/MirProducerToolLocalizer.java @@ -7,4 +7,5 @@ public interface MirProducerToolLocalizer { public void initializeGenerationValueSet(Map aValueSet); public PrintWriter openWriter(String anIdentifier) throws MirLocalizerFailure; public void closeWriter(PrintWriter aWriter); + public String filterText(String aText); } diff --git a/source/mircoders/localizer/basic/MirBasicProducerLocalizer.java b/source/mircoders/localizer/basic/MirBasicProducerLocalizer.java index 9f2876d4..9e3dc965 100755 --- a/source/mircoders/localizer/basic/MirBasicProducerLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicProducerLocalizer.java @@ -36,15 +36,6 @@ public class MirBasicProducerLocalizer implements MirProducerLocalizer { MirGlobal.getConfigProperty("Producer.StorageRoot") + "/index.shtml", MirGlobal.getConfigIntegerProperty("Producer.StartPage.Items"), MirGlobal.getConfigIntegerProperty("Producer.StartPage.Newswire"))); - - - aStartPageFactory.addFactory( - new TopicStartPageProducerFactory( - MirGlobal.getConfigProperty("Producer.StartPage.Template"), - "bundles.admin", - MirGlobal.getConfigProperty("Producer.StorageRoot") + "/${filename}index.shtml", - MirGlobal.getConfigIntegerProperty("Producer.StartPage.Items"), - MirGlobal.getConfigIntegerProperty("Producer.StartPage.Newswire"))); } protected void setupSynchronizationFactory(CompositeProducerFactory aSynchronizationFactory) { diff --git a/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java b/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java index 406f0316..c1f9db22 100755 --- a/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicProducerToolLocalizer.java @@ -17,7 +17,7 @@ public class MirBasicProducerToolLocalizer implements MirProducerToolLocalizer { Map configMap = new HashMap(); - configMap.put("producerDocRoot", MirGlobal.getConfigProperty("Producer.DocRoot")); + configMap.put("producerDocRoot", "");//MirGlobal.getConfigProperty("Producer.DocRoot")); configMap.put("storageRoot", MirGlobal.getConfigProperty("Producer.StorageRoot")); configMap.put("productionHost", MirGlobal.getConfigProperty("Producer.ProductionHost")); configMap.put("openAction", MirGlobal.getConfigProperty("Producer.OpenAction")); @@ -36,15 +36,17 @@ public class MirBasicProducerToolLocalizer implements MirProducerToolLocalizer { EntityList topicList=null; EntityList entityList=null; EntityList parentList=null; + EntityList languageList=null; try { ModuleLinksImcs linksImcsModule = new ModuleLinksImcs(DatabaseLinksImcs.getInstance()); ModuleTopics topicsModule = new ModuleTopics(DatabaseTopics.getInstance()); + ModuleLanguage languageModule = new ModuleLanguage(DatabaseLanguage.getInstance()); topicList = topicsModule.getTopicsList(); entityList = linksImcsModule.getByWhereClause("", "sortpriority, title", -1); parentList = linksImcsModule.getByWhereClause("to_parent_id=NULL", "sortpriority, title", -1); - + languageList = languageModule.getByWhereClause("", "id", -1); } catch (Throwable t) { System.out.println("initializeGenerationValueSet: Exception "+t.getMessage()); @@ -81,4 +83,14 @@ public class MirBasicProducerToolLocalizer implements MirProducerToolLocalizer { public void closeWriter(PrintWriter aWriter) { aWriter.close(); }; + + public String filterText(String aText) { + return StringUtil.createHTML( + StringUtil.deleteForbiddenTags(aText), + MirGlobal.getConfigProperty("Producer.ImageRoot"), + MirGlobal.getConfigProperty("Producer.MailLinkName"), + MirGlobal.getConfigProperty("Producer.ExtLinkName"), + MirGlobal.getConfigProperty("Producer.IntLinkName") + ); + } } diff --git a/source/mircoders/producer/ContentProducer.java b/source/mircoders/producer/ContentProducer.java index 09fbfa62..99902a53 100755 --- a/source/mircoders/producer/ContentProducer.java +++ b/source/mircoders/producer/ContentProducer.java @@ -12,11 +12,10 @@ import mir.generator.*; import mircoders.localizer.*; import mircoders.global.*; import mircoders.entity.*; +import mircoders.entity.adapter.*; import org.apache.struts.util.MessageResources; -// @todo ML: the file that gets generated should be better configurable - public class ContentProducer implements mir.producer.Producer { private String generatorIdentifier; @@ -60,7 +59,7 @@ public class ContentProducer implements mir.producer.Producer { while (browser.hasNext()) { content = (EntityContent) browser.next(); - dataMap.put("content", content); + dataMap.put("content", ContentAdapterDefinition.getInstance().makeEntityAdapter(content)); String date = content.getValue("date"); diff --git a/source/mircoders/producer/GeneratingProducerNode.java b/source/mircoders/producer/GeneratingProducerNode.java new file mode 100755 index 00000000..0e25977d --- /dev/null +++ b/source/mircoders/producer/GeneratingProducerNode.java @@ -0,0 +1,49 @@ +package mircoders.producer; + +import java.util.*; +import java.io.*; +import mir.util.*; +import mir.producer.*; +import mir.generator.*; +import mircoders.global.*; +import mircoders.localizer.*; + +public class GeneratingProducerNode implements ProducerNode { + private String generatorExpression; + private String destinationExpression; + + public GeneratingProducerNode(String aGenerator, String aDestination) { + generatorExpression=aGenerator; + destinationExpression=aDestination; + } + + public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure { + Generator generator; + PrintWriter printWriter; + String generatorIdentifier; + String destinationIdentifier; + + try { + destinationIdentifier = ParameterExpander.expandExpression( aValueMap, destinationExpression ); + generatorIdentifier = ParameterExpander.expandExpression( aValueMap, generatorExpression ); + + aLogger.println("Generating " + generatorIdentifier + " into " + destinationIdentifier); + printWriter = MirGlobal.localizer().producerTool().openWriter( destinationIdentifier ); + generator = MirGlobal.localizer().generators().makeGenerator( generatorIdentifier ); + generator.generate(printWriter, aValueMap, aLogger); + MirGlobal.localizer().producerTool().closeWriter( printWriter ); + aLogger.println("Done generating"); + } + catch (Throwable t) { + aLogger.println("Error while generating: " + t.getMessage()); + t.printStackTrace(aLogger); + + throw new ProducerFailure(t.getMessage(), t); + } + + } + + public Set buildVerbSet() { + return new HashSet(); + } +} \ No newline at end of file diff --git a/source/mircoders/producer/NodedProducerFactory.java b/source/mircoders/producer/NodedProducerFactory.java new file mode 100755 index 00000000..ca547de3 --- /dev/null +++ b/source/mircoders/producer/NodedProducerFactory.java @@ -0,0 +1,36 @@ +package mircoders.producer; + +import java.util.*; +import mir.producer.*; +import mircoders.global.*; + +public class NodedProducerFactory implements ProducerFactory { + private ProducerNode rootNode; + + public NodedProducerFactory(ProducerNode aRootNode) { + rootNode = aRootNode; + } + + public mir.producer.Producer makeProducer(String aVerb) throws ProducerFailure { + Map baseValues; + + baseValues = new HashMap(); + + MirGlobal.localizer().producerTool().initializeGenerationValueSet(baseValues); + + return new NodedProducer(rootNode, aVerb, baseValues); + }; + + public Iterator verbs() { + Set verbSet = rootNode.buildVerbSet(); + + if (verbSet.isEmpty()) { + verbSet = new HashSet(); + + verbSet.add("(default)"); + } + + return verbSet.iterator(); + }; +} + diff --git a/source/mircoders/producer/StaticProducerFactory.java b/source/mircoders/producer/StaticProducerFactory.java index f5024cd7..4413ff40 100755 --- a/source/mircoders/producer/StaticProducerFactory.java +++ b/source/mircoders/producer/StaticProducerFactory.java @@ -18,7 +18,6 @@ public class StaticProducerFactory implements ProducerFactory { outputFile = anOutputFile; } - public mir.producer.Producer makeProducer(String aVerb) throws ProducerFailure { try { return new StaticProducer( generatorIdentifier, resourceBundle, outputFile ); diff --git a/source/mircoders/producer/TopicStartPageProducerFactory.java b/source/mircoders/producer/TopicStartPageProducerFactory.java index aee7267a..5b3f29ac 100755 --- a/source/mircoders/producer/TopicStartPageProducerFactory.java +++ b/source/mircoders/producer/TopicStartPageProducerFactory.java @@ -7,6 +7,8 @@ import mir.util.*; import mircoders.storage.*; import mircoders.module.*; import mircoders.entity.*; +import mircoders.global.*; +import mircoders.localizer.*; public class TopicStartPageProducerFactory implements ProducerFactory { @@ -35,7 +37,10 @@ public class TopicStartPageProducerFactory implements ProducerFactory { CompositeProducer result = new CompositeProducer(); Map values = new HashMap(); + try { + MirGlobal.localizer().producerTool().initializeGenerationValueSet(values); + ModuleContent contentModule = new ModuleContent(DatabaseContent.getInstance()); ModuleTopics topicsModule = new ModuleTopics(DatabaseTopics.getInstance()); ModuleBreaking breakingModule = new ModuleBreaking(DatabaseBreaking.getInstance()); @@ -54,7 +59,8 @@ public class TopicStartPageProducerFactory implements ProducerFactory { values.put("archiv_url", topic.getValue("archiv_url")); - // ML: ok, this is way to low-level for this place: + + // ML: ok, this is way too low-level for this place: String orderBy = "webdb_create desc"; String topicSelection = "exists (select * from content_x_topic where content_id=content.id and topic_id='"+topic.getValue("id")+"')"; String featureWhereClause = "is_published='1' and to_article_type='2' and "+topicSelection; diff --git a/source/mirlocal/bolivia.indymedia.org/BoliviaLocalizer.java b/source/mirlocal/bolivia.indymedia.org/BoliviaLocalizer.java new file mode 100755 index 00000000..68663f53 --- /dev/null +++ b/source/mirlocal/bolivia.indymedia.org/BoliviaLocalizer.java @@ -0,0 +1,21 @@ +package mirlocal.bolivia.indymedia.org; + +import mircoders.localizer.*; +import mircoders.global.*; +import mircoders.localizer.basic.*; + +public class BoliviaLocalizer extends MirBasicLocalizer { + + public MirProducerLocalizer producers() { + return new BoliviaProducerLocalizer(); + } + + public MirOpenPostingLocalizer openPostings() { + return new BoliviaOpenPostingLocalizer(); + } + + public MirProducerToolLocalizer producerTool() { + return new BoliviaProducerToolLocalizer(); + } + +} \ No newline at end of file diff --git a/source/mirlocal/bolivia.indymedia.org/BoliviaOpenPostingLocalizer.java b/source/mirlocal/bolivia.indymedia.org/BoliviaOpenPostingLocalizer.java new file mode 100755 index 00000000..f546193c --- /dev/null +++ b/source/mirlocal/bolivia.indymedia.org/BoliviaOpenPostingLocalizer.java @@ -0,0 +1,16 @@ +package mirlocal.bolivia.indymedia.org; + +import mircoders.localizer.*; +import mircoders.global.*; +import mircoders.localizer.basic.*; + +public class BoliviaOpenPostingLocalizer extends MirBasicOpenPostingLocalizer { + + public void afterContentPosting() { + super.afterContentPosting(); + } + + public void afterCommentPosting() { + super.afterCommentPosting(); + } +} diff --git a/source/mirlocal/bolivia.indymedia.org/BoliviaProducerLocalizer.java b/source/mirlocal/bolivia.indymedia.org/BoliviaProducerLocalizer.java new file mode 100755 index 00000000..132c98a0 --- /dev/null +++ b/source/mirlocal/bolivia.indymedia.org/BoliviaProducerLocalizer.java @@ -0,0 +1,167 @@ +package mirlocal.bolivia.indymedia.org; + +import java.util.*; +import mir.producer.*; +import mircoders.global.*; +import mircoders.localizer.*; +import mircoders.localizer.basic.*; +import mircoders.producer.*; +import mircoders.storage.*; +import mircoders.entity.adapter.*; + +public class BoliviaProducerLocalizer extends MirBasicProducerLocalizer { + + protected void setupContentFactory(CompositeProducerFactory aContentFactory) { + + EntityEnumeratingProducerNode contentNode = null; + + try { + contentNode = + new EntityEnumeratingProducerNode( "content", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(), + new CompositeProducerNode( new ProducerNode[] { + new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "", + new ResourceBundleProducerNode("lang", "producer_${language.code}", + new GeneratingProducerNode( + "/producer/bolivia.indymedia.org/article.template", + "${config.storageRoot}/${language.code}/articles/${content.date.year}/${content.date.month}/${content.id}.shtml" + ) + ) + ) + } ) + ); + } + catch (Throwable t) { + } + + contentNode.addVerb( "all", "is_published='1'", "" ); + contentNode.addVerb( "all", "is_published='1' and is_produced='f'", "" ); + + aContentFactory.addFactory( new NodedProducerFactory( contentNode ) ); + + +// public EntityEnumeratingProducerNode(String aKey, StorageObject aStorage, EntityAdapterDefinition aDefinition, ProducerNode aSubNode) { + +// aContentFactory.addFactory( +// new ContentProducerFactory( +// "producer/content.template", +// "bundles.admin", +// MirGlobal.getConfigProperty("Producer.StorageRoot") + "/content/${contentyear}/${contentmonth}/${contentid}.inc", +// Integer.parseInt(MirGlobal.getConfigProperty("Producer.Content.Batchsize")))); + +// aContentFactory.addFactory( +// new ContentProducerFactory( +// "producer/article.template", +// "bundles.admin", +// MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/${contentyear}/${contentmonth}/${contentid}.shtml", +// Integer.parseInt(MirGlobal.getConfigProperty("Producer.Content.Batchsize")))); + } + + protected void setupStartPageFactory(CompositeProducerFactory aStartPageFactory) { + ProducerNode startPageNode = null; + + try { + startPageNode = + new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(), + "is_published='1' and to_article_type = 2", "date desc, webdb_create desc", 10, + new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(), + "is_published='1' and to_article_type = 1", "date desc, webdb_create desc", 10, + new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(), + "", "webdb_create desc", 5, + new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), + "", "code", 10, + new CompositeProducerNode( new ProducerNode[] { + new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "", + new ResourceBundleProducerNode("lang", "producer_${language.code}", + new GeneratingProducerNode( + "/producer/bolivia.indymedia.org/startpage.template", + "${config.storageRoot}/${language.code}/index.shtml" + ) + ) + ) + } ) + ) + ) + ) + ); + } + catch (Throwable t) { + } + + aStartPageFactory.addFactory( new NodedProducerFactory( startPageNode ) ); + + +/* + aStartPageFactory.addFactory( + new TopicStartPageProducerFactory( + "producer/citystart.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/start${filename}.shtml", + MirGlobal.getConfigIntegerProperty("Producer.StartPage.Items"), + 0)); + + aStartPageFactory.addFactory( + new TopicStartPageProducerFactory( + "producer/newswire.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/newswire${filename}.inc", + 0, + MirGlobal.getConfigIntegerProperty("Producer.StartPage.Newswire"))); + + aStartPageFactory.addFactory( + new StartPageProducerFactory( + "producer/start.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/start.shtml", + MirGlobal.getConfigIntegerProperty("Producer.StartPage.Items"), + 0)); + + aStartPageFactory.addFactory( + new StartPageProducerFactory( + "producer/newswire.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/newswire.inc", + 0, + MirGlobal.getConfigIntegerProperty("Producer.StartPage.Newswire"))); + +*/ + } + + protected void setupStaticFactory(CompositeProducerFactory aStaticFactory) { + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/nav.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/nav.inc")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/top.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/top.inc")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/bottom.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/bottom.inc")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/style.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/style.css")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/articlepre.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/articlepre.shtml")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/articlepost.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/articlepost.shtml")); + } + +} diff --git a/source/mirlocal/bolivia.indymedia.org/BoliviaProducerToolLocalizer.java b/source/mirlocal/bolivia.indymedia.org/BoliviaProducerToolLocalizer.java new file mode 100755 index 00000000..569825b3 --- /dev/null +++ b/source/mirlocal/bolivia.indymedia.org/BoliviaProducerToolLocalizer.java @@ -0,0 +1,36 @@ +package mirlocal.bolivia.indymedia.org; + +import java.util.*; +import java.io.*; +import freemarker.template.utility.*; +import mir.misc.*; +import mir.entity.*; +import mircoders.module.*; +import mircoders.storage.*; +import mircoders.localizer.*; +import mircoders.localizer.basic.*; +import mircoders.global.*; + +public class BoliviaProducerToolLocalizer extends MirBasicProducerToolLocalizer { + + public void initializeGenerationValueSet(Map aValueSet) { + super.initializeGenerationValueSet(aValueSet); + + EntityList topicList=null; + EntityList cityList=null; + + + try { + ModuleTopics topicsModule = new ModuleTopics(DatabaseTopics.getInstance()); + + cityList = topicsModule.getByWhereClause("main_url<>'c'", "title", -1); + topicList = topicsModule.getByWhereClause("main_url<>'c'", "title", -1); + } + catch (Throwable t) { + throw new RuntimeException("initializeGenerationValueSet: Exception "+t.getMessage()); + } + + aValueSet.put("topics", topicList); + aValueSet.put("cities", topicList); + } +} diff --git a/source/mirlocal/indymedia.nl/IndyNLLocalizer.java b/source/mirlocal/indymedia.nl/IndyNLLocalizer.java new file mode 100755 index 00000000..464e4ed7 --- /dev/null +++ b/source/mirlocal/indymedia.nl/IndyNLLocalizer.java @@ -0,0 +1,21 @@ +package mirlocal.indymedia.nl; + +import mircoders.localizer.*; +import mircoders.global.*; +import mircoders.localizer.basic.*; + +public class IndyNLLocalizer extends MirBasicLocalizer { + + public MirProducerLocalizer producers() { + return new IndyNLProducerLocalizer(); + } + + public MirOpenPostingLocalizer openPostings() { + return new IndyNLOpenPostingLocalizer(); + } + + public MirProducerToolLocalizer producerTool() { + return new MirBasicProducerToolLocalizer(); + } + +} \ No newline at end of file diff --git a/source/mirlocal/indymedia.nl/IndyNLOpenPostingLocalizer.java b/source/mirlocal/indymedia.nl/IndyNLOpenPostingLocalizer.java new file mode 100755 index 00000000..4c5fd189 --- /dev/null +++ b/source/mirlocal/indymedia.nl/IndyNLOpenPostingLocalizer.java @@ -0,0 +1,17 @@ +package mirlocal.indymedia.nl; + +import mircoders.localizer.*; +import mircoders.global.*; +import mircoders.localizer.basic.*; + +public class IndyNLOpenPostingLocalizer extends MirBasicOpenPostingLocalizer { + + public void afterContentPosting() { + super.afterContentPosting(); + } + + public void afterCommentPosting() { + MirGlobal.producerEngine().addJob("startpage", "all"); + super.afterCommentPosting(); + } +} diff --git a/source/mirlocal/indymedia.nl/IndyNLProducerLocalizer.java b/source/mirlocal/indymedia.nl/IndyNLProducerLocalizer.java new file mode 100755 index 00000000..c7562f95 --- /dev/null +++ b/source/mirlocal/indymedia.nl/IndyNLProducerLocalizer.java @@ -0,0 +1,216 @@ +package mirlocal.indymedia.nl; + +import java.util.*; +import mir.producer.*; +import mircoders.global.*; +import mircoders.localizer.*; +import mircoders.localizer.basic.*; +import mircoders.producer.*; +import mircoders.storage.*; +import mircoders.entity.adapter.*; + +public class IndyNLProducerLocalizer extends MirBasicProducerLocalizer { + + protected void setupContentFactory(CompositeProducerFactory aContentFactory) { + EntityEnumeratingProducerNode contentNode = null; + + try { + contentNode = + new EntityEnumeratingProducerNode( "content", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(), + new CompositeProducerNode( new ProducerNode[] { + new GeneratingProducerNode( + "/producer/indymedia.nl/content.template", + "${config.storageRoot}/content/${content.date.year}/${content.date.month}/${content.id}.inc" + ), + new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "", + new ResourceBundleProducerNode("lang", "producer_${language.code}", + new GeneratingProducerNode( + "/producer/indymedia.nl/article.template", + "${config.storageRoot}/${language.code}/${content.date.year}/${content.date.month}/${content.id}.shtml" + ) + ) + ) + } ) + ); + } + catch (Throwable t) { + } + + contentNode.addVerb( "all", "is_published='1'", "" ); + contentNode.addVerb( "all", "is_published='1' and is_produced='f'", "" ); + + aContentFactory.addFactory( new NodedProducerFactory( contentNode ) ); + + +/* + aContentFactory.addFactory( + new ContentProducerFactory( + "producer/content.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/content/${contentyear}/${contentmonth}/${contentid}.inc", + Integer.parseInt(MirGlobal.getConfigProperty("Producer.Content.Batchsize")))); + + aContentFactory.addFactory( + new ContentProducerFactory( + "producer/article.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/${contentyear}/${contentmonth}/${contentid}.shtml", + Integer.parseInt(MirGlobal.getConfigProperty("Producer.Content.Batchsize")))); + */ + } + + protected void setupStartPageFactory(CompositeProducerFactory aStartPageFactory) { + ProducerNode startPageNode = null; + + try { + startPageNode = + new EntityListProducerNode("features", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(), + "is_published='1' and to_article_type = 2", "date desc, webdb_create desc", 10, + new EntityListProducerNode("newswire", DatabaseContent.getInstance(), ContentAdapterDefinition.getInstance(), + "is_published='1' and to_article_type = 1", "date desc, webdb_create desc", 10, + new EntityListProducerNode("breaking", DatabaseBreaking.getInstance(), BreakingAdapterDefinition.getInstance(), + "", "webdb_create desc", 5, + new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), + "", "code", 10, + new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "", + new ResourceBundleProducerNode("lang", "producer_${language.code}", + new CompositeProducerNode( new ProducerNode[] { + new GeneratingProducerNode( + "/producer/indymedia.nl/start.template", + "${config.storageRoot}/${language.code}/start.shtml" + ), + new GeneratingProducerNode( + "/producer/indymedia.nl/newswire.template", + "${config.storageRoot}/${language.code}/newswire.inc" + ) + } ) + ) + ) + ) + ) + ) + ); + } + catch (Throwable t) { + } + + aStartPageFactory.addFactory( new NodedProducerFactory( startPageNode ) ); +/* + aStartPageFactory.addFactory( + new StartPageProducerFactory( + "producer/start.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/start.shtml", + MirGlobal.getConfigIntegerProperty("Producer.StartPage.Items"), + 0)); + + aStartPageFactory.addFactory( + new StartPageProducerFactory( + "producer/newswire.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/newswire.inc", + 0, + MirGlobal.getConfigIntegerProperty("Producer.StartPage.Newswire"))); +*/ + } + + protected void setupSynchronizationFactory(CompositeProducerFactory aSynchronizationFactory) { + if(MirGlobal.getConfigBooleanProperty("Rsync")){ + aSynchronizationFactory.addFactory( + new ScriptCallProducerFactory(MirGlobal.getConfigProperty("Rsync.Script.Path"))); + } + else { + NullProducerFactory nullFactory = new NullProducerFactory(); + nullFactory.addVerb("run"); + aSynchronizationFactory.addFactory(nullFactory); + } + } + + protected void setupStaticFactory(CompositeProducerFactory aStaticFactory) { + ProducerNode staticNode = null; + + try { + staticNode = + new EntityListProducerNode("languages", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), + "", "code", 10, + new EntityEnumeratingProducerNode( "language", DatabaseLanguage.getInstance(), LanguageAdapterDefinition.getInstance(), "", "", + new ResourceBundleProducerNode("lang", "producer_${language.code}", + new CompositeProducerNode( new ProducerNode[] { + new GeneratingProducerNode( + "/producer/indymedia.nl/nav.template", + "${config.storageRoot}/${language.code}/nav.inc" + ), + new GeneratingProducerNode( + "/producer/indymedia.nl/top.template", + "${config.storageRoot}/${language.code}/top.inc" + ), + new GeneratingProducerNode( + "/producer/indymedia.nl/bottom.template", + "${config.storageRoot}/${language.code}/bottom.inc" + ), + new GeneratingProducerNode( + "/producer/indymedia.nl/style.template", + "${config.storageRoot}/${language.code}/style.css" + ), + new GeneratingProducerNode( + "/producer/indymedia.nl/top.template", + "${config.storageRoot}/${language.code}/top.inc" + ), + new GeneratingProducerNode( + "/producer/indymedia.nl/articlepre.template", + "${config.storageRoot}/${language.code}/articlepre.inc" + ), + new GeneratingProducerNode( + "/producer/indymedia.nl/articlepost.template", + "${config.storageRoot}/${language.code}/articlepost.inc" + ), + } ) + ) + ) + ); + } + catch (Throwable t) { + } + + aStaticFactory.addFactory( new NodedProducerFactory( staticNode ) ); + + +/* + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/nav.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/nav.inc")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/top.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/top.inc")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/bottom.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/bottom.inc")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/style.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/style.css")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/articlepre.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/articlepre.shtml")); + + aStaticFactory.addFactory( + new StaticProducerFactory( + "producer/articlepost.template", + "bundles.admin", + MirGlobal.getConfigProperty("Producer.StorageRoot") + "/nl/articlepost.shtml")); +*/ + } +}