/**
* Դ�������ƣ�OperationButtonGroupControl.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui
* ����˵����Ԫ�����û��༭��UIչ����ع���
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.metadata.ui.editors;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.util.EContentAdapter;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.metadata.ui.actions.MetadataRunScriptAction;
import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage;
import com.hundsun.ares.studio.jres.model.metadata.MetadataResourceData;
import com.hundsun.ares.studio.jres.model.metadata.Operation;
import com.hundsun.ares.studio.jres.script.engin.RunScriptAction;
/**
* ���ݻ�ȡ�û�������Ϣ���õ��༭���ĺͽű���صĶ�̬��ť
*
* @author gongyf
*
*/
public class OperationButtonGroupControl {
public static final String GROUP_ID = "jres.meta.operation";
private MetadataRunScriptAction[] actions;
private IARESResource res;
private MetadataResourceData<?> data;
private ToolBarManager manager;
private EContentAdapter adapter = new EContentAdapter() {
public void notifyChanged(Notification notification) {
super.notifyChanged(notification);
// �������Ϣ�����û������б�ı��
if (notification.getNotifier() == data
&& notification.getFeature() == MetadataPackage.Literals.METADATA_RESOURCE_DATA__OPERATIONS) {
refresh();
} else if (data.getOperations()
.contains(notification.getNotifier())) {
refresh();
}
};
};
/**
* @param manager
*/
public OperationButtonGroupControl(ToolBarManager manager) {
super();
this.manager = manager;
}
/**
* @return the manager
*/
public ToolBarManager getManager() {
return manager;
}
public void setARESResource(IARESResource res) {
this.res = res;
}
protected MetadataRunScriptAction createAction() {
return new MetadataRunScriptAction();
}
/**
* @param data
* the data to set
*/
public void setData(MetadataResourceData<?> data) {
if (this.data != null) {
data.eAdapters().remove(adapter);
}
this.data = data;
if (this.data != null) {
data.eAdapters().add(adapter);
}
}
public void refresh() {
// ԭ���Ǿ�������ԭ�ȵ�Action����
RunScriptAction[] oldActions = actions;
actions = new MetadataRunScriptAction[data.getOperations().size()];
if (oldActions != null) {
System.arraycopy(oldActions, 0, actions, 0,
oldActions.length > actions.length ? actions.length
: oldActions.length);
}
for (int i = 0; i < actions.length; i++) {
Operation op = data.getOperations().get(i);
if (actions[i] == null) {
actions[i] = createAction();
actions[i].setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_FILE));
}
actions[i].setRes(res);
actions[i].setInfo(data);
actions[i].setOperation(op);
actions[i].setText(op.getTitle());
String script = getFileContent(op.getFile());
actions[i].setScript(script);
}
updateToolbarItems();
manager.update(true);
}
private void updateToolbarItems() {
// ��ɾ��ԭ����
boolean inOperationGroup = false;
List<IContributionItem> toRemove = new ArrayList<IContributionItem>();
for (IContributionItem item : manager.getItems()) {
if (item.isGroupMarker()) {
if (StringUtils.equals(item.getId(), GROUP_ID)) {
inOperationGroup = true;
continue;
} else if (inOperationGroup) {
break;
}
continue;
}
if (inOperationGroup) {
toRemove.add(item);
}
}
for (IContributionItem item : toRemove) {
manager.remove(item);
}
for (IAction a : actions) {
manager.appendToGroup(GROUP_ID, a);
}
}
private String getFileContent(String fileName) {
FileInputStream inputStream = null;
try {
File scriptFile = new File(fileName);
inputStream = new FileInputStream(scriptFile);
String scriptCode = IOUtils.toString(inputStream, "UTF-8");
return scriptCode;
} catch (FileNotFoundException e) {
} catch (IOException e) {
} catch (Exception e) {
} finally {
IOUtils.closeQuietly(inputStream);
}
return "";
}
}