/**
*
*/
package com.hundsun.ares.studio.ui.editor.extend;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.EClass;
import com.hundsun.ares.studio.core.IARESElement;
import com.hundsun.ares.studio.core.model.Constants;
import com.hundsun.ares.studio.core.model.ExtensibleModel;
/**
* ��չ��������
* @author gongyf
*
*/
public class ExtensibleModelEditingRoot {
private IARESElement resource;
private EClass eClass;
private ExtensibleModel model;
// Groups����ͨ����չ��ע�����Ϣ��group��Ӧһ��EditingSupport��չ��
private List<ExtensibleModelEditingGroup> groups;
// category������������ʾ��ʱ��ķ�����Ϣ
private List<ExtensibleModelEditingCategory> categories;
public ExtensibleModelEditingRoot(IARESElement resource, ExtensibleModel model) {
super();
this.resource = resource;
this.eClass = model.eClass();
this.model = model;
}
public IARESElement getARESElement() {
return resource;
}
public EClass getEClass() {
return eClass;
}
public ExtensibleModel getModel() {
return model;
}
public List<ExtensibleModelEditingGroup> getGroups() {
if (groups == null) {
init();
}
return groups;
}
/**
* �����������ʾ�õķ���
* @return
*/
public List<ExtensibleModelEditingCategory> getCategories() {
if (categories == null) {
init();
}
return categories;
}
/**
* ��ʼ��������Groups��Category�ṹ��Ϣ
*/
private void init() {
groups = new ArrayList<ExtensibleModelEditingGroup>();
categories = new ArrayList<ExtensibleModelEditingCategory>();
for (IExtensibleModelEditingSupport es : ExtensibleModelUtils.getEndabledEditingSupports(getARESElement(), getEClass())) {
if (!StringUtils.equals(getARESElement().getElementName(), "module.xml") && !StringUtils.equalsIgnoreCase(es.getKey(), Constants.USER_DATA2_KEY)) {
continue;
}
ExtensibleModelEditingGroup group = new ExtensibleModelEditingGroup(this, es);
groups.add(group);
// �������е���չ����������������չʾ��ʱ��Ӧ�������ĸ�����
for (ExtensibleModelEditingEntry entry : group.getEntries()) {
// �����չ���������Լ��ṩ�˷�����Ϣ����ʹ��������ࣻ���û���ṩ����ʹ��������EditingSupport��name��Ϊ����
String category = entry.getDescriptor().getCategory();
if (StringUtils.isEmpty(category)) {
category = group.getEditingSupport().getName();
}
ExtensibleModelEditingCategory cate = findCategory(category, categories);
if (cate == null) {
cate = new ExtensibleModelEditingCategory(category, this);
categories.add(cate);
}
entry.setCategory(cate);
cate.getEntries().add(entry);
}
}
}
private ExtensibleModelEditingCategory findCategory(String category, List<ExtensibleModelEditingCategory> catetories) {
for (ExtensibleModelEditingCategory cate : catetories) {
if (StringUtils.equals(category, cate.getName()))
return cate;
}
return null;
}
}