/**
*
*/
package com.hundsun.ares.studio.jres.metadata.core.script.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.emf.common.util.EList;
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.ConstantItem;
import com.hundsun.ares.studio.jres.model.metadata.Function;
import com.hundsun.ares.studio.jres.model.metadata.FunctionProxy;
import com.hundsun.ares.studio.jres.model.metadata.MenuItem;
import com.hundsun.ares.studio.jres.model.metadata.MenuList;
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.script.api.metadata.IFunctionProxyScriptWrap;
import com.hundsun.ares.studio.jres.script.api.metadata.IMenuFunctionScriptWrap;
import com.hundsun.ares.studio.jres.script.api.metadata.IMenuItemScriptWrap;
import com.hundsun.ares.studio.jres.script.api.wrap.IMenuResScriptWrap;
import com.hundsun.ares.studio.jres.script.api.wrap.IMetadataItemScriptWrap;
/**
* @author yanwj06282
*
*/
public class MenuResScriptWrapImpl extends MetadataResScriptWrapImpl implements IMenuResScriptWrap {
private static Logger logger = Logger.getLogger(MenuResScriptWrapImpl.class);
public MenuResScriptWrapImpl(MenuList metadata, IARESResource resource, boolean includeRequiredBundles) {
super(metadata, resource, includeRequiredBundles);
}
public IARESResource getResource(){
return resource;
}
@Override
public MenuList getOriginalInfo() {
return (MenuList) super.getOriginalInfo();
}
@Override
public IMenuItemScriptWrap[] getItems() {
List<IMetadataItemScriptWrap> items = new ArrayList<IMetadataItemScriptWrap>();
// 2014-3-28 sundl �������˴������ù��̵������Ϊ�˷���ͳһ�ڸ����ﴦ�����������Ϊ����super.getItems()
for (IMetadataItemScriptWrap item : super.getItems()) {
MetadataItemScriptWrapImpl metadataItem = (MetadataItemScriptWrapImpl) item;
MenuItem menuItem = (MenuItem) metadataItem.getOriginalInfo();
items.add(new MenuItemScriptWrapImpl(menuItem, metadataItem.getResource()));
}
return items.toArray(new IMenuItemScriptWrap[0]);
}
@Override
public IMetadataItemScriptWrap[] getNotCateItems() {
List<IMetadataItemScriptWrap> items = new ArrayList<IMetadataItemScriptWrap>();
return items.toArray(new IMetadataItemScriptWrap[0]);
}
/**
* ��ȡ���ܺ�
*
* @return
*/
public IMenuFunctionScriptWrap[] getFunctions(){
List<IMenuFunctionScriptWrap> items = new ArrayList<IMenuFunctionScriptWrap>();
for(Function fun : getOriginalInfo().getFunctions()){
items.add(new MenuFunctionScriptWrapImpl(fun, 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)) {
MenuList info = (MenuList) refRes.getInfo(MenuList.class);
for(Function item : info.getFunctions()){
items.add(new MenuFunctionScriptWrapImpl(item, refRes));
}
}
} catch (Exception e) {
logger.error(e);
}
}
}
return items.toArray(new IMenuFunctionScriptWrap[0]);
}
/**
* ��ȡ�˵��빦�ܶ�Ӧ����
*
* @return
*/
public IFunctionProxyScriptWrap[] getFunctionProxys(){
List<IFunctionProxyScriptWrap> items = new ArrayList<IFunctionProxyScriptWrap>();
List<FunctionProxy> functionProxys = new ArrayList<FunctionProxy>();
getAllFunctionProxy(getOriginalInfo().getItems(), functionProxys);
for(FunctionProxy fun : functionProxys){
items.add(new FunctionProxyScriptWrapImpl(fun, resource));
}
return items.toArray(new IFunctionProxyScriptWrap[0]);
}
public IMenuFunctionScriptWrap addFunction(){
Function fun = MetadataFactory.eINSTANCE.createFunction();
getOriginalInfo().getFunctions().add(fun);
save();
return new MenuFunctionScriptWrapImpl(fun, resource);
}
private void getAllFunctionProxy(EList<MenuItem> items,List<FunctionProxy> fps){
for(MenuItem item : items){
fps.addAll(item.getFunctionProxys());
if (item.getSubItems().size() > 0) {
getAllFunctionProxy(item.getSubItems() ,fps);
}
}
}
private void getAllMenuItem(EList<MenuItem> items,List<MenuItem> itemTotal){
for(MenuItem item : items){
itemTotal.add(item);
if (item.getSubItems().size() > 0) {
getAllMenuItem(item.getSubItems() ,itemTotal);
}
}
}
}