/** * Դ�������ƣ�JRESReferencProvider.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.core * ����˵����JRES Studio�Ļ����ܹ���ģ�͹淶 * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.core.context; import java.util.HashMap; import java.util.List; import java.util.Map; import com.google.common.base.Function; import com.google.common.collect.Collections2; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.context.statistic.IResourceTable; import com.hundsun.ares.studio.model.reference.RelationInfo; import com.hundsun.ares.studio.reference.ReferenceManager; public class JRESReferencProvider implements /*IResourceChangeListener,*/IResReferenceProvider{ IARESProject project; public JRESReferencProvider(IARESProject project){ this.project = project; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResReferenceProvider#getReferList(java.lang.String, java.lang.String, java.lang.String) */ @Override public Object[] getReferList(String masterUniqueName, String masterNamespace, String masterType) { return null; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResReferenceProvider#getLinkList(java.lang.String, java.lang.String, java.lang.String) */ @Override public Object[] getLinkList(String uniqueName, String namespace, String type) { List<RelationInfo> infoList = null; // FIXME JRESĿǰ��ʹ�������ռ� infoList = ReferenceManager.getInstance().getRelationInfoByTarget(type, uniqueName, project); // if (StringUtils.equals(namespace, IResourceTable.Scope_IGNORE_NAMESPACE) || StringUtils.isBlank(namespace)) { // infoList = ReferenceManager.getInstance().getRelationInfoByTarget(type, uniqueName, project); // } else { // infoList = ReferenceManager.getInstance().getRelationInfoByTarget(type, uniqueName, namespace, project); // } return Collections2.transform(infoList, new Function<RelationInfo, Map<Object, Object>>() { @Override public Map<Object, Object> apply(RelationInfo from) { return transform(from); } }).toArray(); } private static Map<Object, Object> transform(RelationInfo rel) { Map<Object, Object> map = new HashMap<Object, Object>(); map.put(IResourceTable.RES_NAME, rel.getUsedRefName()); map.put(IResourceTable.RES_NAMESPACE, rel.getUsedRefNamespace()); map.put(IResourceTable.RES_TYPE, rel.getUsedRefType()); // map.put(IResourceTable.TARGET_OWNER, rel.get); map.put(IResourceTable.TARGET_RESOURCE, rel.getHostResource()); return map; } // private static Logger log = Logger.getLogger(JRESReferencProvider.class); // // IARESProject project; // // public ReferenceTable table = new ReferenceTable(); // // private List<ITableDataProvider> tabledataprovider = new ArrayList<ITableDataProvider>(); // // public JRESReferencProvider(IARESProject project){ // this.project = project; // //���� // try { // Connection connect = null; // try { // connect = MemDBConnectionPool.getInstance() // .getConnection(); //// table.setTextTable(true); //���ı���ʽ�洢 // table.createTable(connect, MemTable.genID()); // // } finally { // MemDBConnectionPool.getInstance().returnConnection(connect); // } // // //Ĭ�ϱ������ṩ�� // DefaultReferenceProvider defaultReferenceProvider = new DefaultReferenceProvider(); // defaultReferenceProvider.setArgs(project,table); // tabledataprovider.add(defaultReferenceProvider); // // ITableProviderFactory[] providers = TableDataProviderRegistry.getInstance().getAdapterByType(IValidateConstant.EXTENTION_TYPE_REFERENCE_TABLE_PROVIDER); // for(ITableProviderFactory factory:providers){ // for(ITableDataProvider item:factory.createProviders()){ // item.setArgs(project,table); // tabledataprovider.add(item); // } // } // //��ʼ�� // ArrayList<IContextUpdateSource> tmplist = new ArrayList<IContextUpdateSource>(); // tmplist.add(new DefaultContextUpdateSource(ITableDataProvider.UPDATETYPE_INIT,null)); // //��ʼ��ʱ��ס�� // synchronized (table) { // update(tmplist); // } // ARESCore.addElementListener(new IARESElementChangeListener() { // @Override // public void elementChanged(ARESElementChangedEvent event) { // if (event.getType() == ARESElementChangedEvent.RES_PATH) { // IARESProject changedProject = (IARESProject) event.getElement(); // if (changedProject.equals(JRESReferencProvider.this.project)) { // ArrayList<IContextUpdateSource> tmplist = new ArrayList<IContextUpdateSource>(); // tmplist.add(new DefaultContextUpdateSource(IJRESContext.UPDATETYPE_RESPATH,new Object[]{event.getElement().getResource()})); // update(tmplist); // } // } // } // }); // // } catch (Exception e) { // e.printStackTrace(); // } // } // // public void update(final Object context){ // synchronized (IJRESContext.REFERENCE_UPDATE_SYNC_SIGNAL) { // for(ITableDataProvider provider:tabledataprovider){ // provider.update(context); // } // } // } // // private Object getResourceByID(String index){ // for(ITableDataProvider provider:tabledataprovider){ // if(provider.contains(index)){ // return provider.getDataByIndex(index); // } // } // return null; // } // // public void clear(){ // Connection connect = null; // try { // connect = MemDBConnectionPool.getInstance().getConnection(); // Statement statement = connect.createStatement(); // //statement.executeUpdate(String.format("drop table if exists %s;", tablename)); // statement.executeUpdate(String.format("drop table %s;", table.getTablename())); // statement.close(); // } catch (Throwable e) { //// System.out.println("������ñ�����ʧ�ܡ�"+e.getMessage()); // }finally{ // MemDBConnectionPool.getInstance().returnConnection(connect); // } // } // // public void clearData(){ // Connection connect = null; // try { // connect = MemDBConnectionPool.getInstance().getConnection(); // Statement statement = connect.createStatement(); // //statement.executeUpdate(String.format("drop table if exists %s;", tablename)); // int lines = statement.executeUpdate(String.format("delete from %s;", table.getTablename())); //// System.out.println("hhhhhhhhhhhhhh��ձ�"+lines); // statement.close(); // } catch (Throwable e) { // System.out.println("������ñ�����ʧ�ܡ�"+e.getMessage()); // }finally{ // MemDBConnectionPool.getInstance().returnConnection(connect); // } // } // // @Override // protected void finalize() throws Throwable { // try { // clear(); // } catch (Exception e) { // } // super.finalize(); // } // // @Override // public void resourceChanged(IResourceChangeEvent event) { // IResourceDelta delta = event.getDelta(); // // ��Ŀ�رյ�ʱ����ʱ������null�� // if (delta == null) // return; // // IResource resource = event.getResource(); // // // 2012-05-25 sundl �����Ŀɾ��/�ر�ǰ���� // switch (event.getType()) { // case IResourceChangeEvent.PRE_DELETE: // case IResourceChangeEvent.PRE_CLOSE: // // project-delete event should be processed before the underlying resource is really deleted. // if (resource.getType() == IResource.PROJECT ) { // IProject project = resource.getProject(); // IARESProject aresProj = ARESCore.create(project); // if (aresProj.exists() && aresProj.equals(this.project)) { // // ��Ŀɾ��/�ر� // log.debug(String.format("��⵽��Ŀ %s �رջ�ɾ�������������...", project.getName())); // // ContextManager�б�������Ŀ��ӦProvider���б����б���ɾ�����´���ȡ��ʱ�򣬾ͻ����³�ʼ��һ�� // log.debug(String.format("----�����Ŀ %s ��ContextProviderManager�еĻ���...", project.getName())); // ContextProviderManager.getInstance().removeContextProvider(aresProj, IValidateConstant.KEY_REFERENCE_PROVIDER); // // ����JRESContextManager�н�����ͼ�����Ҳ������ʵĻ���drop�����Ե��±��޷�drop,��ʱֻ������� // clearData(); // } // } // return; // case IResourceChangeEvent.POST_CHANGE: // //checkProjectChanges(delta); // handleResourceChangeDelta(delta); // break; // } // } // // private void handleResourceChangeDelta(IResourceDelta delta) { // final Map<Object, Object> changemap = new HashMap<Object, Object>(); // try { // delta.accept(new IResourceDeltaVisitor() { // // public boolean visit(IResourceDelta delta) throws CoreException { // if (delta.getResource().getType() == IResource.FILE) { // IProject tmp = (IProject) delta.getResource().getProject(); // if (!changemap.containsKey(tmp)) { // changemap.put(tmp, new ArrayList()); // } // // if (delta.getKind() == IResourceDelta.REMOVED ) { // ((List)changemap.get(tmp)).add( // new DefaultContextUpdateSource(IJRESContext.UPDATETYPE_DEL,new Object[]{delta.getResource()} // )); // }else if(delta.getKind() == IResourceDelta.ADDED){ // ((List)changemap.get(tmp)).add( // new DefaultContextUpdateSource(IJRESContext.UPDATETYPE_ADD,new Object[]{delta.getResource()} // )); // }else if (delta.getKind() == IResourceDelta.CHANGED) { // // ����������ݱ仯����Ҫ�ռ���Ϣ // if ( (delta.getFlags() & IResourceDelta.CONTENT) == 0) { // return false; // } // String filename = delta.getResource().getName(); //// if (IJRESContext.RESPATH.equals(filename)) { //// //����������Դ���� //// ((List)changemap.get(tmp)).add( //// new DefaultContextUpdateSource(IJRESContext.UPDATETYPE_RESPATH,new Object[]{delta.getResource()} //// )); //// } // if (IJRESContext.PROJECT_XML.equals(filename)) { // //����������Դ���� // ((List)changemap.get(tmp)).add( // new DefaultContextUpdateSource(IJRESContext.PROJECT_XML,new Object[]{delta.getResource()} // )); // } // String fileExtension = delta.getResource().getFileExtension(); // ((List)changemap.get(tmp)).add( // new DefaultContextUpdateSource(IJRESContext.UPDATETYPE_FILE_CHANGE,new Object[]{delta.getResource()} // )); // } // return false; // �Ѹ��£������ٱ��� // } // return true; // } // }); // } catch (Exception e) { // e.printStackTrace(); // } // //�����Դ�仯�Ĺ��̰��������̣����� // if(changemap.containsKey(this.project.getProject())){ // update(changemap.get(project.getProject())); // } // } // // /* (non-Javadoc) // * @see com.hundsun.ares.studio.jres.context.IResReferenceProvider#getReferList(java.lang.String, java.lang.String, java.lang.String) // */ // @Override // public Object[] getReferList(String masterUniqueName, // String masterNamespace, String masterType) { // return null; // } // // /* (non-Javadoc) // * @see com.hundsun.ares.studio.jres.context.IResReferenceProvider#getLinkList(java.lang.String, java.lang.String, java.lang.String) // */ // @Override // public Object[] getLinkList(String uniqueName, String namespace, String type) { // synchronized (IJRESContext.REFERENCE_UPDATE_SYNC_SIGNAL) { // Statement statement = null; // ResultSet rs = null; // Connection connect = null; // List<Object> tlist = new ArrayList<Object>(); // try { // connect = MemDBConnectionPool.getInstance().getConnection(); // statement = connect.createStatement(); // // StringBuffer sql = new StringBuffer(); // sql.append(String.format("select %s from %s where",IReferenceTable.MASTER_INDEX, table.getTablename())); // if (StringUtils.isNotBlank(uniqueName)) { // sql.append(String.format(" %s='%s' and", IReferenceTable.SLAVE_NAME,uniqueName)); // } // sql.append(String.format(" %s='%s'",IReferenceTable.SLAVE_TYPE,type )); // sql.append(String.format(" and %s='%s'",IReferenceTable.SLAVE_NAMESPACE,namespace )); // // rs = statement.executeQuery(sql.toString()); // // // �ж����޼�¼ // while (rs.next()) { // tlist.add(getResouceByIndex(rs.getString(IReferenceTable.MASTER_INDEX))); // } // } catch (Exception e) { // e.printStackTrace(); // } finally { // try { // // �黹���� // try {rs.close();} catch (Exception e2) {} // try {statement.close();} catch (Exception e2) {} // MemDBConnectionPool.getInstance().returnConnection(connect); // } catch (Exception e2) { // e2.printStackTrace(); // } // } // return tlist.toArray(); // } // } // // public Object getResouceByIndex(String index) { // for(ITableDataProvider provider:tabledataprovider){ // if(provider.contains(index)){ // return provider.getDataByIndex(index); // } // } // return null; // } }