/**
* Դ�������ƣ�AbstractMetadataFormPage.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.metadata.ui.editors;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.transaction.ResourceSetChangeEvent;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.hundsun.ares.studio.core.IValidateConstant;
import com.hundsun.ares.studio.jres.model.metadata.MetadataCategory;
import com.hundsun.ares.studio.jres.model.metadata.MetadataItem;
import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage;
import com.hundsun.ares.studio.jres.model.metadata.MetadataResourceData;
import com.hundsun.ares.studio.ui.editor.EMFFormEditor;
import com.hundsun.ares.studio.ui.editor.EMFFormPage;
import com.hundsun.ares.studio.ui.editor.blocks.ColumnViewerBlock;
/**
* @author yanwj06282
*
*/
public abstract class AbstractMetadataFormPage extends EMFFormPage {
private static final Logger logger = Logger.getLogger(AbstractMetadataFormPage.class);
/**
* @param editor
* @param id
* @param title
*/
public AbstractMetadataFormPage(EMFFormEditor editor, String id,
String title) {
super(editor, id, title);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.form.EMFFormPage#isNeedValidate(org.eclipse.emf.transaction.ResourceSetChangeEvent)
*/
@Override
protected boolean isNeedValidate(ResourceSetChangeEvent event) {
for (Notification notification : event.getNotifications()) {
if (notification.getFeature() == MetadataPackage.Literals.METADATA_CATEGORY__CHILDREN
|| notification.getFeature() == MetadataPackage.Literals.METADATA_RESOURCE_DATA__ITEMS
|| notification.getNotifier() instanceof MetadataItem
|| notification.getNotifier() instanceof MetadataCategory) {
return true;
}else if(null != notification.getFeature() &¬ification.getFeature() instanceof EStructuralFeature){
//��ȡ�Ƿ���Ҫ����Ԫ��Ϣ
EAnnotation annotaion = ((EStructuralFeature)notification.getFeature()).getEAnnotation(IValidateConstant.EXTENTION_VALIDATE_SOURCE);
if(null != annotaion){ //û��Ԫ��Ϣ
String value = annotaion.getDetails().get(IValidateConstant.EXTENTION_VALIDATE_KEY_NEEDVALIDATE);
if(StringUtils.equals("true", value)){
return true;
}
}
}
}
return false;
}
//��ȡԪ�����б�
protected MetadataResourceData<?> getInfo() {
return (MetadataResourceData<?>) getEditor().getInfo();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.form.EMFFormPage#doCreateFormContent(org.eclipse.ui.forms.IManagedForm)
*/
@Override
protected void doCreateFormContent(IManagedForm managedForm) {
Composite body = managedForm.getForm().getBody();
FormToolkit toolkit = managedForm.getToolkit();
createMetadataComposite(body, toolkit);
body.setLayout(new FillLayout());
}
/**
* �����༭����
*
* @param body
* @param toolkit
*/
protected abstract void createMetadataComposite(Composite body, FormToolkit toolkit);
protected abstract ColumnViewerBlock getViewerBlock();
@Override
public void setActive(boolean active) {
super.setActive(active);
if (active) {
ColumnViewerBlock block = getViewerBlock();
ColumnViewer viewer = block == null ? null : block.getColumnViewer();
if (viewer != null) {
getSite().setSelectionProvider(viewer);
logger.debug("Selection provider: " + viewer.hashCode() + " Site: " + getSite().hashCode());
} else {
logger.debug("Page actived, but no viewer!");
}
}
}
}