/** * */ package com.hundsun.ares.studio.jres.metadata.core.script.impl; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import com.hundsun.ares.studio.core.IARESBundle; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.util.ARESElementUtil; import com.hundsun.ares.studio.jres.model.metadata.MetadataCategory; import com.hundsun.ares.studio.jres.model.metadata.MetadataFactory; import com.hundsun.ares.studio.jres.model.metadata.MetadataItem; import com.hundsun.ares.studio.jres.model.metadata.MetadataResourceData; import com.hundsun.ares.studio.jres.model.metadata.util.MetadataUtil; import com.hundsun.ares.studio.jres.script.api.wrap.IMetadataCategoryScriptWrap; import com.hundsun.ares.studio.jres.script.api.wrap.IMetadataItemScriptWrap; import com.hundsun.ares.studio.jres.script.api.wrap.IMetadataResScriptWrap; import com.hundsun.ares.studio.jres.script.base.ResourceWrapBase; import com.hundsun.ares.studio.jres.script.tool.HistoryCommentHelper; /** * @author yanwj06282 * */ public class MetadataResScriptWrapImpl extends ResourceWrapBase<MetadataResourceData> implements IMetadataResScriptWrap { private static Logger logger = Logger.getLogger(MetadataResScriptWrapImpl.class); boolean includeRequiredBundles; // 2014-3-28 sundl ��Ӳ���includeRequiredProjects ��ʾ�Ƿ�������ù��̺����ð� public MetadataResScriptWrapImpl(MetadataResourceData metadata , IARESResource resource, boolean includeRequiredBundles) { super(resource); this.includeRequiredBundles = includeRequiredBundles; } @Override public IMetadataItemScriptWrap[] getItems() { List<IMetadataItemScriptWrap> items = new ArrayList<IMetadataItemScriptWrap>(); for(Object item : getOriginalInfo().getItems()){ items.add(new MetadataItemScriptWrapImpl((MetadataItem)item, resource)); } if (includeRequiredBundles) { IARESBundle[] bundles = ARESElementUtil.getRefARESProjects(resource.getARESProject()); for (IARESBundle bundle : bundles) { try { IARESResource refRes = bundle.findResource(resource.getName(), resource.getType()); // getRefARESProjects()�������صİ��������� if (refRes != null && !refRes.equals(resource)) { MetadataResourceData info = refRes.getInfo(getInfoClass()); for(Object item : info.getItems()){ items.add(new MetadataItemScriptWrapImpl((MetadataItem)item, refRes)); } } } catch (Exception e) { logger.error(e); } } } return items.toArray(new IMetadataItemScriptWrap[0]); } public IMetadataCategoryScriptWrap[] getCategories (){ List<IMetadataCategoryScriptWrap> cates = new ArrayList<IMetadataCategoryScriptWrap>(); List<MetadataCategory> metaList = getOriginalInfo().getRoot().getChildren(); for(MetadataCategory cate : metaList){ cates.add(new MetadataCategoryScriptWrapImpl(cate ,resource)); } if (includeRequiredBundles) { IARESBundle[] bundles = ARESElementUtil.getRefARESProjects(resource.getARESProject()); for (IARESBundle bundle : bundles) { try { IARESResource refRes = bundle.findResource(resource.getName(), resource.getType()); // getRefARESProjects()�������صİ��������� if (refRes != null && !refRes.equals(resource)) { MetadataResourceData info = refRes.getInfo(getInfoClass()); for(MetadataCategory cate : info.getRoot().getChildren()){ cates.add(new MetadataCategoryScriptWrapImpl(cate ,resource)); } } } catch (Exception e) { logger.error(e); } } } return cates.toArray(new IMetadataCategoryScriptWrap[0]); } public IMetadataItemScriptWrap[] getNotCateItems (){ List<IMetadataItemScriptWrap> items = new ArrayList<IMetadataItemScriptWrap>(); for(MetadataItem item : MetadataUtil.getUncategorizedItems(getOriginalInfo())){ items.add(new MetadataItemScriptWrapImpl(item, resource)); } if (includeRequiredBundles) { IARESBundle[] bundles = ARESElementUtil.getRefARESProjects(resource.getARESProject()); for (IARESBundle bundle : bundles) { try { IARESResource refRes = bundle.findResource(resource.getName(), resource.getType()); // getRefARESProjects()�������صİ��������� if (refRes != null && !refRes.equals(resource)) { MetadataResourceData info = refRes.getInfo(getInfoClass()); for(MetadataItem item : MetadataUtil.getUncategorizedItems(info)){ items.add(new MetadataItemScriptWrapImpl(item, resource)); } } } catch (Exception e) { logger.error(e); } } } return items.toArray(new IMetadataItemScriptWrap[0]); } @Override public String getModifyHistory(String commentMark) { return HistoryCommentHelper.getHistoryCommentForMetadata(getOriginalInfo(),commentMark); } @Override public IMetadataItemScriptWrap findItemByName(String name , boolean ignoreCase) { for(IMetadataItemScriptWrap item : getItems()){ if (!ignoreCase) { if (StringUtils.equals(name, item.getName())) { return item; } }else { if (StringUtils.equalsIgnoreCase(name, item.getName())) { return item; } } } return null; } public IMetadataItemScriptWrap addItem(){ MetadataItem item = MetadataFactory.eINSTANCE.createMetadataItem(); getOriginalInfo().getItems().add(item); return new MetadataItemScriptWrapImpl(item, resource); } public boolean removeItemById(String id){ for(Object obj : getOriginalInfo().getItems()){ if (obj instanceof MetadataItem && StringUtils.equals(((MetadataItem) obj).getName(), id)) { getOriginalInfo().getItems().remove(obj); return true; } } return false; } public void removeItem(IMetadataItemScriptWrap item) { if (item instanceof MetadataItemScriptWrapImpl) { MetadataItemScriptWrapImpl meta = (MetadataItemScriptWrapImpl) item; getOriginalInfo().getItems().remove(meta); } } @Override public Class<MetadataResourceData> getInfoClass() { return MetadataResourceData.class; } }