Changeset 15098

Show
Ignore:
Timestamp:
03/14/10 09:12:55 (5 months ago)
Author:
sys
Message:

Copy / move by id.

Location:
trunk
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • trunk/Jav_Src/src/com/scenari/src/feature/ids/IFindNodeByIdAspect.java

    r14602 r15098  
    5757        /** 
    5858         * Recherche un {@link ISrcNode} par son Id. 
     59         *  
     60         * @return <code>null</code> si l'id n'existe pas. 
    5961         */ 
    6062        public ISrcNode findNodeById(String pId) throws Exception; 
  • trunk/Jav_Src/src/com/scenari/src/feature/ids/IFindUriByIdAspect.java

    r14602 r15098  
    5858        /** 
    5959         * Recherche une Uri par son Id. 
     60         *  
     61         * @return <code>null</code> si cet Id n'existe pas. 
    6062         */ 
    6163        public String findUriById(String pId) throws Exception; 
  • trunk/Jav_Src/src/com/scenari/src/feature/ids/SrcFeatureIds.java

    r14833 r15098  
    7373         * <p>Recherche un {@link ISrcNode} via un srcId.</p> 
    7474         * 
    75          * @return {@link ISrcContent} trouv�u <code>null</code> si pSrcId est <code>null</code>. 
     75         * @return {@link ISrcNode} trouv�u <code>null</code> si pSrcId est <code>null</code> ou si cet Id n'existe pas. 
    7676         * @throws AspectNotFoundException si aucun aspect ne permettant la r�lution de l'Id n'a � trouv� 
    7777         */ 
     
    8383                //Recherche une Uri 
    8484                IFindUriByIdAspect vFindUriAspect = pSrc.getAspect(IFindUriByIdAspect.TYPE); 
    85                 if (vFindUriAspect != null) return pSrc.findNodeByUri(vFindUriAspect.findUriById(pSrcId)); 
     85                if (vFindUriAspect != null) { 
     86                        String vUri = vFindUriAspect.findUriById(pSrcId); 
     87                        return vUri != null ? pSrc.findNodeByUri(vUri) : null; 
     88                } 
    8689                //Echec de la recherche par Id. 
    8790                throw new AspectNotFoundException(IFindNodeByIdAspect.class.getName()); 
     
    183186         * <p>Si la source est dans un �t nul {@link ISrcContent#STATUS_NONE}, force la cr�ion d'un Id pour cette Uri.</p> 
    184187         *  
     188         * @param pAsFolder Si <code>true</code> cr�ISrcContent de type folder si n�ssaire (de type file sinon). 
    185189         * @return L'id de la source ou <code>null</code> si aucun aspect de type {@link IIdAspect} n'a � trouv� 
    186190         */ 
    187         public static String getOrCreateSrcId(ISrcContent pSrcContent) throws Exception { 
     191        public static String getOrCreateSrcId(ISrcContent pSrcContent, boolean pAsFolder) throws Exception { 
    188192                IIdAspect vIdAspect = pSrcContent.getAspect(IIdAspect.TYPE); 
    189                 if (vIdAspect != null) return vIdAspect.getSrcId(ISrcContent.STATUS_NONE); 
     193                if (vIdAspect != null) return vIdAspect.getSrcId(pAsFolder ? ISrcContent.STATUS_FOLDER : ISrcContent.STATUS_FILE); 
    190194                return null; 
    191195        } 
  • trunk/Jav_Wsp/src/com/scenari/m/bdp/item/fs/HWorkspaceFs.java

    r14725 r15098  
    555555                                fFireDiscoveredItems = vOld; 
    556556                        } 
     557                        break; 
     558 
     559                case space: 
     560                case wsp: 
     561                        //not implemented 
     562                        assert (false); 
    557563                } 
    558564        } 
     
    641647                                vResult = new XItemCache(this, vSrcNode); 
    642648                                fItemsByUri.put(pUri, vResult); 
    643                                 String vId = SrcFeatureIds.getSrcId(vSrcNode); 
    644                                 if (vId != null) { 
    645                                         fItemsById.put(vId, vResult); 
    646                                 } 
    647649                                vResult.refresh(true); 
    648650                        } 
     
    657659         * L'itemCache a � rafraichit. 
    658660         *  
    659          * Retourne null si l'uri n'est pas une uri d'item. 
     661         * Retourne null si l'id n'existe pas. 
    660662         */ 
    661663        protected XItemCache xGetItemCacheById(String pSrcId, boolean pRefresh) throws Exception { 
     
    665667                        ISrcNode vSrcNode = SrcFeatureIds.findNodeById(fSubSrcNode, pSrcId); 
    666668                        if (vSrcNode != null) { 
    667                                 vResult = new XItemCache(this, vSrcNode); 
    668                                 fItemsByUri.put(vSrcNode.getSrcUri(), vResult); 
    669                                 //Mutualisation des strings, on reprend la String de l'id de la source. 
    670                                 String vId = SrcFeatureIds.getSrcId(vSrcNode); 
    671                                 if (vId != null) { 
    672                                         fItemsById.put(vId, vResult); 
    673                                 } 
    674                         } 
    675                 } 
    676                 if (pRefresh && vResult != null) vResult.refresh(true); 
     669                                String vSrcId = SrcFeatureIds.getSrcId(vSrcNode); 
     670                                if (vSrcId != null && vSrcId.equals(pSrcId)) { 
     671                                        vResult = new XItemCache(this, vSrcNode); 
     672                                        fItemsByUri.put(vSrcNode.getSrcUri(), vResult); 
     673                                        if (!pRefresh) vResult.setId(vSrcNode); 
     674                                } else if (vSrcId != null) { 
     675                                        //pSrcId �it un alias vers le "bon id".  
     676                                        return xGetItemCacheById(vSrcId, pRefresh); 
     677                                } 
     678                        } 
     679                } 
     680                if (pRefresh && vResult != null) { 
     681                        String vId = vResult.fId; 
     682                        vResult.refresh(true); 
     683                        if (vId != null && (vResult.fId == null || !vResult.fId.equals(vId))) { 
     684                                //L'id a � modifi�u refresh... 
     685                                return xGetItemCacheById(pSrcId, pRefresh); 
     686                        } 
     687                } 
    677688                return vResult; 
    678689        } 
     
    691702                        vResult = new XItemCache(this, pSubSrcNode); 
    692703                        fItemsByUri.put(pSubSrcNode.getSrcUri(), vResult); 
    693                         String vId = SrcFeatureIds.getSrcId(pSubSrcNode); 
    694                         if (vId != null) { 
    695                                 fItemsById.put(vId, vResult); 
    696                         } 
    697704                } 
    698705                vResult.refresh(true); 
     
    713720                        vResult = new XItemCache(this, vSrcNode); 
    714721                        fItemsByUri.put(pUri, vResult); 
    715                         String vId = SrcFeatureIds.getSrcId(vSrcNode); 
    716                         if (vId != null) { 
    717                                 fItemsById.put(vId, vResult); 
    718                         } 
     722                        if (!pRefresh) vResult.setId(vSrcNode); 
    719723                } 
    720724                if (pRefresh) vResult.refresh(true); 
     
    728732                assert Thread.holdsLock(this); 
    729733                fItemsByUri.remove(pItemCache.fUri); 
    730                 XItemCacheData vDatas = pItemCache.getDatasIfExist(); 
    731                 if (vDatas != null) { 
    732                         ISrcNode vSrcNode = vDatas.getWspSrcNodeItem(); 
    733                         try { 
    734                                 String vId = SrcFeatureIds.getSrcId(vSrcNode); 
    735                                 if (vId != null) { 
    736                                         fItemsById.remove(vId); 
    737                                 } 
    738                         } catch (Exception e) { 
    739                                 LogMgr.publishException(e); 
    740                         } 
     734                if (pItemCache.fId != null) { 
     735                        fItemsById.remove(pItemCache.fId); 
    741736                } 
    742737        } 
  • trunk/Jav_Wsp/src/com/scenari/m/bdp/item/fs/WspSrcNodeItem.java

    r14497 r15098  
    393393                        try { 
    394394                                vSubCopyMove.moveFrom(pFrom); 
    395                                 String vIdTarget = SrcFeatureIds.getSrcId(getSubSrcNode()); 
    396                                 if (vIdTarget == null || !vIdFrom.equals(vIdTarget)) { 
    397                                         //L'Id n'a pas suivi, on renomme les items pointeurs... 
    398                                         xRenamePointers(pFrom.getSrcUri(), vIdFrom); 
    399                                 } 
    400395                        } finally { 
    401396                                //On force un revalidation de l'item source et target. 
     397                                //FIXME sauf si listener auto sur subSrc 
    402398                                xValidateItem(pFrom); 
    403399                                xValidateItem(this); 
     400                        } 
     401                        String vIdTarget = SrcFeatureIds.getSrcId(getSubSrcNode()); 
     402                        if (vIdTarget == null || !vIdFrom.equals(vIdTarget)) { 
     403                                //L'Id n'a pas suivi, on renomme les items pointeurs... 
     404                                xRenamePointers(pFrom.getSrcUri(), vIdFrom); 
     405                        } else { 
     406                                //On ne fait qu'un refresh pour r�aluer les refUri 
     407                                xRefreshPointers(pFrom.getSrcUri()); 
    404408                        } 
    405409                } else { 
     
    428432        protected void xValidateItem(ISrcNode pFrom) { 
    429433                try { 
    430                         IHItemDef vItemDefFrom = pFrom.getAspect(IWspSrc.ITEMDEF_ASPECT_TYPE); 
    431                         if (vItemDefFrom != null) { 
    432                                 InputStream vIn = pFrom.newInputStream(false); 
    433                                 HStreamHandler vStreamHandler = vIn != null ? new HStreamHandler(vIn) : null; 
    434                                 try { 
    435                                         IHItemType vItemType = HTreatIdentif.findItemType(vItemDefFrom.hGetWorkspace(), pFrom.getSrcUri(), null, vStreamHandler); 
    436                                         IUser vUser = ThreadUser.getUser(); 
    437                                         int vClientId = ContextBdp.getThreadClientInt(); 
    438                                         vItemType.hGetModuleSave().hValidateItem(vItemDefFrom, vStreamHandler, vUser != null ? vUser.getAccount() : null, vClientId, null); 
    439                                 } finally { 
    440                                         if (vStreamHandler != null) vStreamHandler.hCloseAndPurgeCache(); 
     434                        if (pFrom.getContentStatus() <= ISrcContent.STATUS_NONE) { 
     435                                IHWorkspace vWspFrom = pFrom.getAspect(IWspSrc.WORKSPACE_ASPECT_TYPE); 
     436                                if (vWspFrom != null) { 
     437                                        vWspFrom.refreshUri(pFrom.getSrcUri()); 
     438                                } 
     439                        } else { 
     440                                IHItemDef vItemDefFrom = pFrom.getAspect(IWspSrc.ITEMDEF_ASPECT_TYPE); 
     441                                if (vItemDefFrom != null) { 
     442                                        InputStream vIn = pFrom.newInputStream(false); 
     443                                        HStreamHandler vStreamHandler = vIn != null ? new HStreamHandler(vIn) : null; 
     444                                        try { 
     445                                                IHItemType vItemType = HTreatIdentif.findItemType(vItemDefFrom.hGetWorkspace(), pFrom.getSrcUri(), null, vStreamHandler); 
     446                                                IUser vUser = ThreadUser.getUser(); 
     447                                                int vClientId = ContextBdp.getThreadClientInt(); 
     448                                                vItemType.hGetModuleSave().hValidateItem(vItemDefFrom, vStreamHandler, vUser != null ? vUser.getAccount() : null, vClientId, null); 
     449                                        } finally { 
     450                                                if (vStreamHandler != null) vStreamHandler.hCloseAndPurgeCache(); 
     451                                        } 
    441452                                } 
    442453                        } 
     
    484495        } 
    485496 
     497        /** 
     498         * Revalide les items pointeurs de cet item suite �n renommage. 
     499         */ 
     500        protected void xRefreshPointers(String pUriFrom) throws Exception { 
     501                //On transforme les items pointeurs sur pFrom 
     502                ISearchRequestEditable vReq = SrcFeatureSearch.newRequest(); 
     503                vReq.setMainExpression(new LinkParents().setStartPath(pUriFrom)); 
     504                Iterator<ISearchResultRow> vIt = SrcFeatureSearch.execute(vReq, getWorkspace().findNodeByUri(URI_ROOT)); 
     505                while (vIt.hasNext()) { 
     506                        XItemCache vItemCache = fItemCacheData.getItemCache().getWsp().xGetOrCreateItemCache(vIt.next().getRowUri(), false); 
     507                        vItemCache.xUnlinkChilds(); 
     508                        vItemCache.xLinkChilds(); 
     509                } 
     510        } 
     511 
    486512        public void fillFields(IFieldsCollector pFieldsToCollect) throws Exception { 
    487513                //Fields du subSource. 
  • trunk/Jav_Wsp/src/com/scenari/m/bdp/item/fs/XItemCache.java

    r14479 r15098  
    4444import java.util.Date; 
    4545import java.util.Iterator; 
     46import java.util.Map; 
    4647 
    4748import org.xml.sax.Attributes; 
     
    149150                        if (pItemPtd != null) { 
    150151                                //Mutualisation des instances d'objets en m�ire 
    151                                 fRefUriPtd = pItemPtd.getUri(); 
     152                                if (fRefUriPtd.equals(pItemPtd.getUri())) { 
     153                                        fRefUriPtd = pItemPtd.getUri(); 
     154                                } else if (fRefUriPtd.equals(pItemPtd.getId())) { 
     155                                        fRefUriPtd = pItemPtd.getId(); 
     156                                } 
    152157                        } 
    153158                } 
     
    348353        protected XLink fFirstPointer = null; 
    349354 
    350         /** Liste chain�d'items en cache (champ g� par la classe XSpace). */ 
    351         protected XItemCache fNextItem = null; 
    352  
    353355        /** Uri de cet item. */ 
    354356        protected String fUri = IHItem.URI_NULL; 
     357 
     358        /** Id de cet item. */ 
     359        protected String fId = null; 
    355360 
    356361        /** ItemType de cette item. */ 
     
    398403        public String getUri() { 
    399404                return fUri; 
     405        } 
     406 
     407        public String getId() { 
     408                return fId; 
    400409        } 
    401410 
     
    645654                } 
    646655                ISrcNode vSrc = vDatas.getWspSrcNodeItem().getSubSrcNode(); 
     656                //Refresh de l'ID. 
     657                this.setId(vSrc); 
    647658                if (fStatusItem == IHItem.STATUS_UNKNOWN) { 
    648659                        xLoadItemFromSource(false, vSrc, vSrc.getLastModifWithChildren(), IContextBdp.CLIENTID_NONE); 
     
    834845                XItemCacheData vItemData = getDatas(); 
    835846                vItemData.fLastRefresh = System.currentTimeMillis(); 
    836                 fMemLastModif = vItemData.getWspSrcNodeItem().getSubSrcNode().getLastModifWithChildren(); 
     847                ISrcNode vSubSrcNode = vItemData.getWspSrcNodeItem().getSubSrcNode(); 
     848                fMemLastModif = vSubSrcNode.getLastModifWithChildren(); 
     849        } 
     850 
     851        /** 
     852         * Affectation / mise �our de l'index par ID. 
     853         */ 
     854        public void setId(ISrcNode pSrcNode) throws Exception { 
     855                assert Thread.holdsLock(getWsp()); 
     856                String vNewId = SrcFeatureIds.getSrcId(pSrcNode); 
     857                if (fId == null && vNewId == null) return; 
     858                if (fId == null && vNewId != null) { 
     859                        getWsp().fItemsById.put(vNewId, this); 
     860                } else if (vNewId == null) { 
     861                        getWsp().fItemsById.remove(fId); 
     862                } else if (vNewId.equals(fId)) { 
     863                        return; 
     864                } else { 
     865                        Map<String, XItemCache> vMap = getWsp().fItemsById; 
     866                        vMap.remove(fId); 
     867                        vMap.put(vNewId, this); 
     868                } 
     869                fId = vNewId; 
    837870        } 
    838871 
     
    924957                        } 
    925958                } 
    926                 xRecalStatusItem(); 
     959                xComputeItemStatus(); 
    927960        } 
    928961 
     
    9961029         * Recalcul du status global de l'item apr�validation des liens notemment. 
    9971030         */ 
    998         protected void xRecalStatusItem() { 
     1031        protected void xComputeItemStatus() { 
    9991032                //Si les liens n'ont pas � calcul�on ne fait rien. 
    10001033                boolean fHasWarning = (fFirstContentProblem != null); 
     
    10461079        public void xUnlinkChilds() throws Exception { 
    10471080                if (fAttrs == null || fStatusItem == STATUS_INTERNAL_NOTLINKED) { return; } 
    1048                 if (fAttrs != null) { 
    1049                         for (int i = 0; i < fAttrs.length; i = i + 4) { 
    1050                                 if (fAttrs[i] == IHAttr.TYPE_REF || fAttrs[i] == IHAttr.TYPE_LINK) { 
    1051                                         XLink vLink = (XLink) fAttrs[i + 3]; 
    1052                                         XItemCache vPtd = vLink.fPtd; 
    1053                                         if (vPtd == null) { 
    1054                                                 continue; 
     1081                for (int i = 0; i < fAttrs.length; i = i + 4) { 
     1082                        if (fAttrs[i] == IHAttr.TYPE_REF || fAttrs[i] == IHAttr.TYPE_LINK) { 
     1083                                XLink vLink = (XLink) fAttrs[i + 3]; 
     1084                                XItemCache vPtd = vLink.fPtd; 
     1085                                if (vPtd == null) { 
     1086                                        continue; 
     1087                                } 
     1088                                XLink vPrec = null; 
     1089                                XLink vCurr = vPtd.fFirstPointer; 
     1090                                while (vCurr != null) { 
     1091                                        //On recherche ce pointeur dans le Ptd 
     1092                                        if (vCurr == vLink) { 
     1093                                                //Trouv�                                                if (vPrec != null) { 
     1094                                                        vPrec.fNextPointer = vCurr.fNextPointer; 
     1095                                                } else { 
     1096                                                        vPtd.fFirstPointer = vCurr.fNextPointer; 
     1097                                                } 
     1098                                                break; 
    10551099                                        } 
    1056                                         XLink vPrec = null; 
    1057                                         XLink vCurr = vPtd.fFirstPointer; 
    1058                                         while (vCurr != null) { 
    1059                                                 //On recherche ce pointeur dans le Ptd 
    1060                                                 if (vCurr == vLink) { 
    1061                                                         //Trouv�                                                        if (vPrec != null) { 
    1062                                                                 vPrec.fNextPointer = vCurr.fNextPointer; 
    1063                                                         } else { 
    1064                                                                 vPtd.fFirstPointer = vCurr.fNextPointer; 
    1065                                                         } 
    1066                                                         break; 
    1067                                                 } 
    1068                                                 vPrec = vCurr; 
    1069                                                 vCurr = vCurr.fNextPointer; 
    1070                                         } 
     1100                                        vPrec = vCurr; 
     1101                                        vCurr = vCurr.fNextPointer; 
    10711102                                } 
    10721103                        } 
     
    11041135                                //On recaclule le satus de l'item pointeur si il a d� � link�sinon perte de ref lors de XSpace.xLinkAllItems). 
    11051136                                if (vPointer.fItem.fStatusItem != STATUS_INTERNAL_NOTLINKED) { 
    1106                                         vPointer.fItem.xRecalStatusItem(); 
     1137                                        vPointer.fItem.xComputeItemStatus(); 
    11071138                                        if (pFireEventUpdated && vOldStatus != vPointer.fItem.fStatusItem) getWsp().xFireEventItemStatus(vPointer.fItem); 
    11081139                                } 
  • trunk/Jav_Wsp/src/com/scenari/m/bdp/module/rename/HRenamingPlanSpace.java

    r14471 r15098  
    7575                                String vNewUri = PoolBuffers.getStringAndFreeStringBuilder(vBuf); 
    7676                                if (vRefById) { 
    77                                         String vNewId = SrcFeatureIds.getSrcId(fNewSrc.findNodeByUri(vNewUri)); 
     77                                        String vNewId = SrcFeatureIds.getOrCreateSrcId(fNewSrc.findNodeByUri(vNewUri), false); 
    7878                                        if (vNewId != null) { 
    7979                                                return vNewId;