/** * Դ�������ƣ�BasicOracleDBService.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.database.oracle.core * ����˵����$desc * ����ĵ��� * ���ߣ���Ҷ�� */ package com.hundsun.ares.studio.jres.database.oracle.internal.service; import java.util.Collections; import java.util.List; import org.apache.commons.lang.StringUtils; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.service.FastFindArrayList; import com.hundsun.ares.studio.core.service.IKeyProvider; import com.hundsun.ares.studio.jres.database.constant.IDatabaseRefType; import com.hundsun.ares.studio.jres.database.oracle.constant.IOracleRefType; import com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService; import com.hundsun.ares.studio.jres.database.oracle.service.IOracleSequence; import com.hundsun.ares.studio.jres.database.oracle.service.IOracleSpace; import com.hundsun.ares.studio.jres.database.oracle.service.IOracleTable; import com.hundsun.ares.studio.jres.database.oracle.service.IOracleTrigger; import com.hundsun.ares.studio.jres.database.oracle.service.IOracleUserPrivilege; import com.hundsun.ares.studio.jres.database.oracle.service.IOracleView; import com.hundsun.ares.studio.jres.model.database.TableResourceData; import com.hundsun.ares.studio.jres.model.database.ViewResourceData; import com.hundsun.ares.studio.jres.model.database.oracle.OracleSpaceResourceData; import com.hundsun.ares.studio.jres.model.database.oracle.OracleUserResourceData; import com.hundsun.ares.studio.jres.model.database.oracle.SequenceResourceData; import com.hundsun.ares.studio.jres.model.database.oracle.TableSpace; import com.hundsun.ares.studio.jres.model.database.oracle.TriggerResourceData; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; /** * @author gongyf * */ public class BasicOracleDBService implements IOracleDBService { final private IARESProject project; private FastFindArrayList<String, IOracleTable> cachedOracleTableList; private FastFindArrayList<String, IOracleTrigger> cachedOracleTriggerList; private FastFindArrayList<String, IOracleUserPrivilege> cachedOracleUserList; private FastFindArrayList<String, IOracleView> cachedOracleViewList; private FastFindArrayList<String, IOracleSpace> cachedOracleSpaceList; private FastFindArrayList<String, IOracleSequence>cachedOracleSequeneceList; /** * @return the cachedOracleSpaceList */ public FastFindArrayList<String, IOracleSpace> getCachedOracleSpaceList() { if(cachedOracleSpaceList == null){ cachedOracleSpaceList = new FastFindArrayList<String, IOracleSpace>(new IKeyProvider<String, IOracleSpace>() { @Override public String getKey(IOracleSpace obj) { return obj.getName(); } }); List<ReferenceInfo> infoList = ReferenceManager.getInstance().getReferenceInfos(project, IOracleRefType.Space, true); for(ReferenceInfo referenceInfo : infoList){ TableSpace ts = (TableSpace)referenceInfo.getObject(); OracleSpaceResourceData spaceResourceData = null; if (ts.eContainer() instanceof OracleSpaceResourceData) { spaceResourceData = (OracleSpaceResourceData) ts.eContainer(); } if (spaceResourceData == null || StringUtils.isBlank(spaceResourceData.getName()) ) { continue; } else{ IOracleSpace space = new OracleSpaceAdapter(spaceResourceData); cachedOracleSpaceList.add(space); } } } return cachedOracleSpaceList; } /** * @return the cachedOracleSequeneceList */ public FastFindArrayList<String, IOracleSequence> getCachedOracleSequeneceList() { if(cachedOracleSequeneceList == null){ cachedOracleSequeneceList = new FastFindArrayList<String, IOracleSequence>(new IKeyProvider<String, IOracleSequence>() { @Override public String getKey(IOracleSequence obj) { return obj.getName(); } }); List<ReferenceInfo> infoList = ReferenceManager.getInstance().getReferenceInfos(project, IOracleRefType.Sequence, true); for(ReferenceInfo referenceInfo : infoList){ SequenceResourceData sequenceResourceData = (SequenceResourceData)referenceInfo.getObject(); String name = sequenceResourceData.getName(); IOracleSequence sequence = new OracleSequenceAdapter(sequenceResourceData); if (StringUtils.isBlank(name)) { continue; } else{ cachedOracleSequeneceList.add(sequence); } } } return cachedOracleSequeneceList; } /** * @return the cachedOracleTableList */ public FastFindArrayList<String, IOracleTable> getCachedOracleTableList() { if(cachedOracleTableList == null){ cachedOracleTableList = new FastFindArrayList<String, IOracleTable>(new IKeyProvider<String, IOracleTable>() { @Override public String getKey(IOracleTable obj) { return obj.getName(); } }); List<ReferenceInfo> infoList = ReferenceManager.getInstance().getReferenceInfos(project, IDatabaseRefType.Table, true); for(ReferenceInfo referenceInfo : infoList){ TableResourceData tableResourceData = (TableResourceData)referenceInfo.getObject(); String name = tableResourceData.getName(); IOracleTable table = new OracleTableAdapter(tableResourceData,project); if (StringUtils.isBlank(name)) { continue; } else{ cachedOracleTableList.add(table); } } } return cachedOracleTableList; } /** * @return the cachedOracleTriggerList */ public FastFindArrayList<String, IOracleTrigger> getCachedOracleTriggerList() { if(cachedOracleTriggerList == null){ cachedOracleTriggerList = new FastFindArrayList<String, IOracleTrigger>(new IKeyProvider<String, IOracleTrigger>() { @Override public String getKey(IOracleTrigger obj) { return obj.getName(); } }); List<ReferenceInfo> infoList = ReferenceManager.getInstance().getReferenceInfos(project, IOracleRefType.Trigger, true); for(ReferenceInfo referenceInfo : infoList){ TriggerResourceData triggerResourceData = (TriggerResourceData)referenceInfo.getObject(); String name = triggerResourceData.getName(); IOracleTrigger trigger = new OracleTriggerAdapter(triggerResourceData); if (StringUtils.isBlank(name)) { continue; } else{ cachedOracleTriggerList.add(trigger); } } } return cachedOracleTriggerList; } /** * @return the cachedOracleUserList */ public FastFindArrayList<String, IOracleUserPrivilege> getCachedOracleUserList() { if(cachedOracleUserList == null){ cachedOracleUserList = new FastFindArrayList<String, IOracleUserPrivilege>(new IKeyProvider<String, IOracleUserPrivilege>() { @Override public String getKey(IOracleUserPrivilege obj) { return obj.getName(); } }); List<ReferenceInfo> infoList = ReferenceManager.getInstance().getReferenceInfos(project, IOracleRefType.User, true); for(ReferenceInfo referenceInfo : infoList){ OracleUserResourceData userResourceData = (OracleUserResourceData)referenceInfo.getObject(); String name = userResourceData.getName(); IOracleUserPrivilege userPrivilege = new OracleUserPrivilegeAdapter(userResourceData); if (StringUtils.isBlank(name)) { continue; } else{ cachedOracleUserList.add(userPrivilege); } } } return cachedOracleUserList; } /** * @return the cachedOracleViewList */ public FastFindArrayList<String, IOracleView> getCachedOracleViewList() { if(cachedOracleViewList == null){ cachedOracleViewList = new FastFindArrayList<String, IOracleView>(new IKeyProvider<String, IOracleView>() { @Override public String getKey(IOracleView obj) { return obj.getName(); } }); List<ReferenceInfo> infoList = ReferenceManager.getInstance().getReferenceInfos(project, IDatabaseRefType.View, true); for(ReferenceInfo referenceInfo : infoList){ ViewResourceData viewResourceData = (ViewResourceData)referenceInfo.getObject(); String name = viewResourceData.getName(); IOracleView table = new OracleViewAdapter(viewResourceData); if (StringUtils.isBlank(name)) { continue; } else{ cachedOracleViewList.add(table); } } } return cachedOracleViewList; } /** * */ public BasicOracleDBService(IARESProject project) { super(); this.project = project; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService#getTableList() */ @Override public List<IOracleTable> getTableList() { return Collections.unmodifiableList(getCachedOracleTableList()); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService#getTable(java.lang.String) */ @Override public IOracleTable getTable(String name) { return getCachedOracleTableList().find(name); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService#getTriggerList() */ @Override public List<IOracleTrigger> getTriggerList() { return Collections.unmodifiableList(getCachedOracleTriggerList()); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService#getTrigger(java.lang.String) */ @Override public IOracleTrigger getTrigger(String name) { return getCachedOracleTriggerList().find(name); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService#getUserList() */ @Override public List<IOracleUserPrivilege> getUserList() { return Collections.unmodifiableList(getCachedOracleUserList()); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService#getUser(java.lang.String) */ @Override public IOracleUserPrivilege getUser(String name) { return getCachedOracleUserList().find(name); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService#getView(java.lang.String) */ @Override public IOracleView getView(String name) { return getCachedOracleViewList().find(name); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.database.oracle.service.IOracleDBService#getViewList() */ @Override public List<IOracleView> getViewList() { return Collections.unmodifiableList(getCachedOracleViewList()); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.core.service.IDataService#refresh() */ @Override public void refresh() { cachedOracleTableList = null; cachedOracleTriggerList = null; cachedOracleUserList = null; cachedOracleViewList = null; cachedOracleSpaceList = null; cachedOracleSequeneceList = null; } @Override public List<IOracleSpace> getSpaceList() { return Collections.unmodifiableList(getCachedOracleSpaceList()); } @Override public IOracleSpace getSpace(String name) { return getCachedOracleSpaceList().find(name); } @Override public List<IOracleSequence> getSequenceList() { return Collections.unmodifiableList(getCachedOracleSequeneceList()); } @Override public IOracleSequence getSequence(String name) { return getCachedOracleSequeneceList().find(name); } }