package org.curriki.xwiki.plugin.asset;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.doc.XWikiAttachment;
import java.util.Map;
import java.util.HashMap;
import org.curriki.xwiki.plugin.asset.text.TextAssetManager;
import org.curriki.xwiki.plugin.asset.attachment.*;
import org.curriki.xwiki.plugin.asset.external.VideoAssetManager;
import org.curriki.xwiki.plugin.asset.external.ExternalAssetManager;
import org.curriki.xwiki.plugin.asset.composite.CompositeAssetManager;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
*/
public abstract class DefaultAssetManager implements AssetManager {
private static final Log LOG = LogFactory.getLog(DefaultAssetManager.class);
private static String CATEGORY_NAME = Constants.ASSET_CATEGORY_UNKNOWN;
private static Class<? extends Asset> ASSET_CLASS = AttachmentAsset.class;
private static final Map<String, AssetManager> assetSubTypes = new HashMap<String, AssetManager>();
public static void addAssetSubType(AssetManager assetManager) {
assetSubTypes.put(assetManager.getCategory(), assetManager);
}
public static AssetManager getAssetSubTypeManager(String category) {
return assetSubTypes.get(category);
}
public static void initAssetSubTypes(XWikiContext context) {
// Add hardcoded asset subtypes
addAssetSubType(new TextAssetManager());
addAssetSubType(new AttachmentAssetManager());
addAssetSubType(new DocumentAssetManager());
addAssetSubType(new ImageAssetManager());
addAssetSubType(new AudioAssetManager());
addAssetSubType(new VideoAssetManager());
addAssetSubType(new ArchiveAssetManager());
addAssetSubType(new InteractiveAssetManager());
addAssetSubType(new ExternalAssetManager());
addAssetSubType(new CompositeAssetManager());
// Add asset sub types from config
String params = context.getWiki().getXWikiPreference("curriki_assetsubtypes", "", context);
if (params.equals(""))
params = context.getWiki().Param("curriki.assetsubtypes");
if ((params!=null)&&!params.equals("")) {
String[] assetsubtypes = StringUtils.split(", ");
for (int i = 0;i<assetsubtypes.length;i++) {
String assetsubtype = assetsubtypes[i];
try {
Class<AssetManager> assetsubtypeClass = (Class<AssetManager>) Class.forName(assetsubtype);
AssetManager newAssetManager = assetsubtypeClass.newInstance();
addAssetSubType(newAssetManager);
} catch (Exception e) {
if (LOG.isErrorEnabled())
LOG.error("Curriki Asset plugin: error loading class for asset subtype " + assetsubtype);
}
}
}
}
abstract public String getCategory();
abstract public Class<? extends Asset> getAssetClass();
public void updateSubAssetClass(XWikiDocument assetDoc, String filetype, String category, XWikiAttachment attachment, XWikiContext context) {
}
}