package com.hundsun.ares.studio.jres.model.metadata.util; import java.util.Collection; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IProgressMonitor; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.util.log.Log; import com.hundsun.ares.studio.jres.model.metadata.MetadataItem; import com.hundsun.ares.studio.jres.model.metadata.MetadataResourceData; /** * �Դ�����Ԫ���ݲ����ķ�װ�����������������������ӣ����ͳһִ��һ�Σ��������ļ��� * ʹ���������Լ��ٴ�����getWorkingCopy()��save()д�ļ���ʱ�䡣 * @author sundl * */ public class MetadataModifyOperation<T extends MetadataItem> { private static Logger logger = Logger.getLogger(MetadataModifyOperation.class); private Multimap<String, IMetadataModifyCommand> cmdMap = ArrayListMultimap.create(); private IARESProject project; private String resType; public MetadataModifyOperation(IARESProject project, String resType) { this.project = project; this.resType = resType; } public void addCommand(IMetadataModifyCommand command) { cmdMap.put(command.getId(), command); } public void run(Log log, IProgressMonitor monitor) { monitor.beginTask("", cmdMap.size() + 2); monitor.subTask("�޸ı�׼�ֶ�..."); IARESResource res = null; MetadataResourceData<?> data = null; try { monitor.subTask("������������..."); res = project.findResource(resType, resType); if (res != null) data = res.getWorkingCopy(MetadataResourceData.class); } catch (ARESModelException e1) { e1.printStackTrace(); log.error("�ڲ�����, �쳣��Ϣ��" + e1.getMessage(), null); } if (data != null) { for (MetadataItem item : data.getItems()) { Collection<IMetadataModifyCommand> commands = cmdMap.get(item.getName()); for (IMetadataModifyCommand cmd : commands) { try { monitor.subTask(cmd.getDescription()); logger.info("�ֶΣ�" + item.getName() + cmd.getDescription()); cmd.excute(item, log); } catch (Exception e) { e.printStackTrace(); log.error("�ڲ�����, �쳣��Ϣ��" + e.getMessage(), null); } monitor.worked(1); } // �������ɾ�� cmdMap.removeAll(item.getName()); } // �Ƿ���ʣ��ģ�˵���д� if (!cmdMap.isEmpty()) { for (IMetadataModifyCommand cmd : cmdMap.values()) { log.error(String.format("û���ҵ���׼�ֶ�%s, �޷�ִ������%s", cmd.getId(), cmd.getDescription()), null); } } monitor.subTask("������Դ..."); try { res.save(data, true, null); } catch (ARESModelException e) { log.error("�����ļ�ʧ��, �쳣��Ϣ��" + e.getMessage(), null); e.printStackTrace(); } } monitor.done(); } }