/** * Դ�������ƣ�JRESStatisticProvider.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.core * ����˵����JRES Studio�Ļ����ܹ���ģ�͹淶 * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.core.context; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; 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.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; /** * * @author sundl * @Deprecated ע�⣬�˽ӿ������ص��������⣬ʹ��ReferenceManager��ؽӿڷ������档 */ @Deprecated public class JRESStatisticProvider implements /*IResourceChangeListener,*/IResStatisticProvider{ private static Logger log = Logger.getLogger(JRESStatisticProvider.class); /** * ��ǰ���� */ private IARESProject project; private boolean useRequiredProjects; /** * @param project * @param useRequiredProjects */ public JRESStatisticProvider(IARESProject project, boolean useRequiredProjects) { super(); this.project = project; this.useRequiredProjects = useRequiredProjects; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#isResouceExist(java.lang.String, java.lang.String, java.lang.String) */ @Override public boolean isResouceExist(String uniqueName, String namespace, String restype) { return getResourceCount(uniqueName, namespace, restype) > 0; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#isResouceUnique(java.lang.String, java.lang.String, java.lang.String) */ @Override public boolean isResouceUnique(String uniqueName, String namespace, String restype) { return getResourceCount(uniqueName, namespace, restype) == 1; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#getResouce(java.lang.String, java.lang.String, java.lang.String) */ @Override public Object[] getResouce(String uniqueName, String namespace, String restype) { List<ReferenceInfo> infoList = null; // FIXME JRESĿǰ��ʹ�������ռ� infoList = ReferenceManager.getInstance().getReferenceInfos(project, restype, uniqueName, useRequiredProjects); // if (StringUtils.equals(namespace, IResourceTable.Scope_IGNORE_NAMESPACE)) { // infoList = ReferenceManager.getInstance().getReferenceInfos(project, restype, uniqueName, useRequiredProjects); // } else { // infoList = ReferenceManager.getInstance().getReferenceInfos(project, restype, uniqueName, namespace, useRequiredProjects); // } return Collections2.transform(infoList, new Function<ReferenceInfo, Map<Object, Object>>() { @Override public Map<Object, Object> apply(ReferenceInfo from) { return transform(from); } }).toArray(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#getResouceByType(java.lang.String) */ @Override public Object[] getResouceByType(String restype) { List<ReferenceInfo> infoList = ReferenceManager.getInstance().getReferenceInfos(project, restype, useRequiredProjects); return Collections2.transform(infoList, new Function<ReferenceInfo, Map<Object, Object>>() { @Override public Map<Object, Object> apply(ReferenceInfo from) { return transform(from); } }).toArray(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#getResouceByTypes(java.lang.String[]) */ @Override public Object[] getResouceByTypes(String[] restypes) { // ������ܳ�������IJ������� List<ReferenceInfo> infoList = new ArrayList<ReferenceInfo>(); for (String type : restypes) { infoList.addAll(ReferenceManager.getInstance().getReferenceInfos(project, type, useRequiredProjects)); } return Collections2.transform(infoList, new Function<ReferenceInfo, Map<Object, Object>>() { @Override public Map<Object, Object> apply(ReferenceInfo from) { return transform(from); } }).toArray(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#getResourceCount(java.lang.String, java.lang.String, java.lang.String) */ @Override public int getResourceCount(String uniqueName, String namespace, String restype) { List<ReferenceInfo> infoList = null; if (StringUtils.equals(namespace, IResourceTable.Scope_IGNORE_NAMESPACE)) { infoList = ReferenceManager.getInstance().getReferenceInfos(project, restype, uniqueName, useRequiredProjects); } else { infoList = ReferenceManager.getInstance().getReferenceInfos(project, restype, uniqueName, namespace, useRequiredProjects); } return infoList.size(); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#getResouceByIndex(java.lang.String) */ @Override public Object getResouceByIndex(String index) { throw new UnsupportedOperationException(); } private static Map<Object, Object> transform(ReferenceInfo ref) { Map<Object, Object> map = new HashMap<Object, Object>(); map.put(IResourceTable.RES_NAME, ref.getRefName()); map.put(IResourceTable.RES_NAMESPACE, ref.getRefNamespace()); map.put(IResourceTable.RES_TYPE, ref.getRefType()); map.put(IResourceTable.TARGET_OWNER, ref.getObject()); map.put(IResourceTable.TARGET_RESOURCE, ref.getResource()); return map; } // /** // * ��Դ�� // */ // public ResouceTable table = new ResouceTable(); // // /** // * �����ṩ���б� // */ // private List<ITableDataProvider> tabledataprovider = new ArrayList<ITableDataProvider>(); // public JRESStatisticProvider(IARESProject project){ // this.project = project; // Connection connect = null; // //���� // try { // connect = MemDBConnectionPool.getInstance().getConnection(); //// table.setTextTable(true); //���ı���ʽ�洢 // table.createTable(connect, MemTable.genID()); // log.debug(String.format("ΪProject%s����: %s", project.getProject().getName(), table.getTablename())); // // //Ĭ�� // DefaultResourceProvider defaultResourceProvider = new DefaultResourceProvider(); // defaultResourceProvider.setArgs(project,table); // tabledataprovider.add(defaultResourceProvider); // // ITableProviderFactory[] providers = TableDataProviderRegistry.getInstance().getAdapterByType(IValidateConstant.EXTENTION_TYPE_STATIC_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)); // // 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(JRESStatisticProvider.this.project)) { // log.debug(String.format("��Ŀ: %s respath �����仯����������...", changedProject.getProject())); // 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(); // }finally{ // MemDBConnectionPool.getInstance().returnConnection(connect); // } // } // // public ResouceTable getTable() { // return table; // } // // // public void update(final Object context){ // log.debug(String.format("������Ŀ%s����", this.project.getProject().getName())); // JRESTreecacheManager.getInstance().remove(new Object[]{IJRESContext.SELECT_CHACHE}); // synchronized (IJRESContext.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)); // log.debug("Drop table: " + table.getTablename()); // statement.execute(String.format("drop table %s;", table.getTablename())); // log.debug("Drop �ɹ�"); // statement.close(); // } catch (Throwable e) { //// System.out.println("������ñ�����ʧ�ܡ�"+e.getMessage()); // //log.debug("Drop ʧ��: " , e); // }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(); // 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())); // JRESTreecacheManager.getInstance().remove(new Object[]{IJRESContext.SELECT_CHACHE}); // // ContextManager�б�������Ŀ��ӦProvider���б����б���ɾ�����´���ȡ��ʱ�򣬾ͻ����³�ʼ��һ�� // log.debug(String.format("----�����Ŀ %s ��ContextProviderManager�еĻ���...", project.getName())); // ContextProviderManager.getInstance().removeContextProvider(aresProj, IValidateConstant.KEY_STATIC_PROVIDER); // log.debug(String.format("----�����Ŀ %s ��JRESContextManager�еĻ���...", project.getName())); // JRESContextManager.removeStatisticProvider(aresProj); // // ����JRESContextManager�н�����ͼ�����Ҳ������ʵĻ���drop�����Ե��±��޷�drop,��ʱֻ������� // clearData(); // } // } // return; // case IResourceChangeEvent.POST_CHANGE: // //checkProjectChanges(delta); // handleResourceChangeDelta(delta); // break; // } // // } // // private void handleResourceChangeDelta(IResourceDelta delta) { // final Map<Object, List<IContextUpdateSource>> changemap = new HashMap<Object, List<IContextUpdateSource>>(); // try { // delta.accept(new IResourceDeltaVisitor() { // // public boolean visit(IResourceDelta delta) throws CoreException { // // ÿ��providerֻ�����Լ�����Ŀ������ // IResource res = delta.getResource(); // if (res != null) { // IProject proj = res.getProject(); // if (proj != null) {//��projectΪ��˵���ǹ������䣬�������� // if (!proj.equals(JRESStatisticProvider.this.project.getProject())) { // return false; // } // } // } // // if (delta.getResource().getType() == IResource.PROJECT) { // // ֻ��ARES������Ҫ�ռ���Ϣ // IProject project = (IProject) delta.getResource(); // return JRESProjectUtils.isARESProject(project); // } // // if (delta.getResource().getType() == IResource.FOLDER) { // IFolder folder = (IFolder) delta.getResource(); // // ֻ�����ǵ���Դ��Ҫ�ռ���Ϣ // if (folder.getParent() != null && folder.getParent().getType() == IResource.PROJECT) { // IARESProject aresProj = ARESCore.create(delta.getResource().getProject()); // if (aresProj != null && aresProj.exists()) { // if (aresProj.getModuleRoot(folder) != null) { // return true; // } // } // // return false; // } // return true; // } // if (delta.getResource().getType() == IResource.FILE) { // IProject tmp = (IProject) delta.getResource().getProject(); // if (!changemap.containsKey(tmp)) { // changemap.put(tmp, new ArrayList<IContextUpdateSource>()); // } // // if (delta.getKind() == IResourceDelta.REMOVED ) { // log.debug(String.format("�ļ��� %s ɾ��...", delta.getResource().getFullPath())); // changemap.get(tmp).add(new DefaultContextUpdateSource(IJRESContext.UPDATETYPE_DEL, new Object[]{delta.getResource()})); // }else if(delta.getKind() == IResourceDelta.ADDED){ // 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.PROJECT_XML.equals(filename)) { // //����������Դ���� // changemap.get(tmp).add( // new DefaultContextUpdateSource(IJRESContext.PROJECT_XML,new Object[]{delta.getResource()} // )); // } // String fileExtension = delta.getResource().getFileExtension(); // 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()) && !changemap.get(this.project.getProject()).isEmpty()){ // update(changemap.get(project.getProject())); // } // } // // //Ĭ�ϼ������ // PreparedStatement countstatement = null; // /** // * Ĭ�ϵļ������ // * @return // */ // private PreparedStatement getDefaultCountStatement(){ // if(null == countstatement){ // Connection connect = null; // try { // connect = MemDBConnectionPool.getInstance().getConnection(); // // StringBuffer sql = new StringBuffer(); // sql.append(String.format("select count(*) as num from %s", table.getTablename())); // sql.append(String.format(" where %s=?", IResourceTable.RES_NAME)); // sql.append(String.format(" and %s=?",IResourceTable.RES_TYPE )); // sql.append(String.format(" and %s=?",IResourceTable.RES_NAMESPACE )); // countstatement = connect.prepareStatement(sql.toString()); // } catch (Exception e) { // }finally{ // // �黹���� // MemDBConnectionPool.getInstance().returnConnection(connect); // } // } // return countstatement; // } // // // //Ĭ�ϼ������ // PreparedStatement countstatementIgnoreNamespace = null; // /** // * ����������namespace // * @return // */ // private PreparedStatement getCountStatementIgnoreNamespace(){ // if(null == countstatementIgnoreNamespace){ // Connection connect = null; // try { // connect = MemDBConnectionPool.getInstance().getConnection(); // // StringBuffer sql = new StringBuffer(); // sql.append(String.format("select count(*) as num from %s", table.getTablename())); // sql.append(String.format(" where %s=?", IResourceTable.RES_NAME)); // sql.append(String.format(" and %s=?",IResourceTable.RES_TYPE )); // countstatementIgnoreNamespace = connect.prepareStatement(sql.toString()); // } catch (Exception e) { // }finally{ // // �黹���� // MemDBConnectionPool.getInstance().returnConnection(connect); // } // } // return countstatementIgnoreNamespace; // } // // // public int getResourceCount(String uniqueName, String namespace, // String restype){ // synchronized (table) { // ResultSet rs = null; // PreparedStatement stt = null; // try { // //��ȡԤ������� // if(IResourceTable.Scope_IGNORE_NAMESPACE.equals(namespace)){ // //���������ռ�Ԥ������� // stt = getCountStatementIgnoreNamespace(); // // stt.setString(1, uniqueName); // stt.setString(2, restype); // }else{ // //Ĭ��Ԥ������� // stt = getDefaultCountStatement(); // // stt.setString(1, uniqueName); // stt.setString(2, restype); // stt.setString(3, namespace); // } // // // rs = stt.executeQuery(); // // // �ж����޼�¼ // if (rs.next()) { // return rs.getInt("num"); // } // } catch (Exception e) { // e.printStackTrace(); // } finally { // try { // rs.close(); // } catch (Exception e2) { // e2.printStackTrace(); // } // } // return 0; // } // // } // // /* (non-Javadoc) // * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#isResouceExist(java.lang.String, java.lang.String, java.lang.String) // */ // @Override // public boolean isResouceExist(String uniqueName, String namespace, // String restype) { // return getResourceCount(uniqueName, namespace, restype) > 0; // } // // // /* (non-Javadoc) // * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#isResouceUnique(java.lang.String, java.lang.String, java.lang.String) // */ // @Override // public boolean isResouceUnique(String uniqueName, String namespace, // String restype) { // return getResourceCount(uniqueName, namespace, restype) < 2; // } // // PreparedStatement resourceStatement = null; // // private PreparedStatement getResourceStatement(){ // if(null == resourceStatement){ // Connection connect = null; // try { // connect = MemDBConnectionPool.getInstance().getConnection(); // StringBuffer sql = new StringBuffer(); // sql.append(String.format("select %s from %s",IResourceTable.RES_INDEX, table.getTablename())); // sql.append(String.format(" where %s=?", IResourceTable.RES_NAME)); // sql.append(String.format(" and %s=?",IResourceTable.RES_TYPE )); // sql.append(String.format(" and %s=?",IResourceTable.RES_NAMESPACE )); // resourceStatement = connect.prepareStatement(sql.toString()); // } catch (Exception e) { // }finally{ // // �黹���� // MemDBConnectionPool.getInstance().returnConnection(connect); // } // } // return resourceStatement; // } // // @Override // public Object[] getResouce(String uniqueName, String namespace, // String restype) { // synchronized (table) { // ResultSet rs = null; // List<Object> tlist = new ArrayList<Object>(); // try { // // PreparedStatement tt = getResourceStatement(); // tt.setString(1, uniqueName); // tt.setString(2, restype); // tt.setString(3, namespace); // // rs = tt.executeQuery(); // // // �ж����޼�¼ // while (rs.next()) { // Object obj = getResouceByIndex(rs.getString(IResourceTable.RES_INDEX)); // tlist.add(obj); // } // } catch (Exception e) { // e.printStackTrace(); // } finally { // try { // rs.close(); // } catch (Exception e2) { // e2.printStackTrace(); // } // } // return tlist.toArray(); // } // } // // /* (non-Javadoc) // * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#getResouceByIndex(java.lang.String) // */ // @Override // public Object getResouceByIndex(String index) { // for(ITableDataProvider provider:tabledataprovider){ // if(provider.contains(index)){ // return provider.getDataByIndex(index); // } // } // return null; // } // // /* (non-Javadoc) // * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#getResouceByType(java.lang.String) // */ // @Override // public Object[] getResouceByType(String restype) { // synchronized (table) { // 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",IResourceTable.RES_INDEX, table.getTablename())); // sql.append(String.format(" where %s='%s'",IResourceTable.RES_TYPE,restype )); // // rs = statement.executeQuery(sql.toString()); // // // �ж����޼�¼ // while (rs.next()) { // tlist.add(getResouceByIndex(rs.getString(IResourceTable.RES_INDEX))); // } // } catch (Exception e) { // e.printStackTrace(); // } finally { // try { // // �黹���� // MemDBConnectionPool.getInstance().returnConnection(connect); // // statement.close(); // rs.close(); // } catch (Exception e2) { // e2.printStackTrace(); // } // } // return tlist.toArray(); // } // } // // /* (non-Javadoc) // * @see com.hundsun.ares.studio.jres.context.IResStatisticProvider#getResouceByTypes(java.lang.String[]) // */ // @Override // public Object[] getResouceByTypes(String[] restypes) { // synchronized (table) { // Statement statement = null; // ResultSet rs = null; // Connection connect = null; // List<Object> tlist = new ArrayList<Object>(); // try { // connect = MemDBConnectionPool.getInstance().getConnection(); // statement = connect.createStatement(); // // StringBuffer types = new StringBuffer(); // for(int i = 0;i < restypes.length;i++){ // if(i == (restypes.length -1)){ // types.append(String.format("'%s'", restypes[i])); // }else{ // types.append(String.format("'%s',", restypes[i])); // } // } // // StringBuffer sql = new StringBuffer(); // sql.append(String.format("select %s from %s",IResourceTable.RES_INDEX, table.getTablename())); // sql.append(String.format(" where %s in (%s)",IResourceTable.RES_TYPE,types.toString() )); // // rs = statement.executeQuery(sql.toString()); // // // �ж����޼�¼ // while (rs.next()) { // tlist.add(getResouceByIndex(rs.getString(IResourceTable.RES_INDEX))); // } // } catch (Exception e) { // e.printStackTrace(); // } finally { // try { // // �黹���� // MemDBConnectionPool.getInstance().returnConnection(connect); // // statement.close(); // rs.close(); // } catch (Exception e2) { // e2.printStackTrace(); // } // } // return tlist.toArray(); // } // } }