Changeset 15098
- Timestamp:
- 03/14/10 09:12:55 (5 months ago)
- Location:
- trunk
- Files:
-
- 7 modified
-
Jav_Src/src/com/scenari/src/feature/ids/IFindNodeByIdAspect.java (modified) (1 diff)
-
Jav_Src/src/com/scenari/src/feature/ids/IFindUriByIdAspect.java (modified) (1 diff)
-
Jav_Src/src/com/scenari/src/feature/ids/SrcFeatureIds.java (modified) (3 diffs)
-
Jav_Wsp/src/com/scenari/m/bdp/item/fs/HWorkspaceFs.java (modified) (7 diffs)
-
Jav_Wsp/src/com/scenari/m/bdp/item/fs/WspSrcNodeItem.java (modified) (3 diffs)
-
Jav_Wsp/src/com/scenari/m/bdp/item/fs/XItemCache.java (modified) (10 diffs)
-
Jav_Wsp/src/com/scenari/m/bdp/module/rename/HRenamingPlanSpace.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Jav_Src/src/com/scenari/src/feature/ids/IFindNodeByIdAspect.java
r14602 r15098 57 57 /** 58 58 * Recherche un {@link ISrcNode} par son Id. 59 * 60 * @return <code>null</code> si l'id n'existe pas. 59 61 */ 60 62 public ISrcNode findNodeById(String pId) throws Exception; -
trunk/Jav_Src/src/com/scenari/src/feature/ids/IFindUriByIdAspect.java
r14602 r15098 58 58 /** 59 59 * Recherche une Uri par son Id. 60 * 61 * @return <code>null</code> si cet Id n'existe pas. 60 62 */ 61 63 public String findUriById(String pId) throws Exception; -
trunk/Jav_Src/src/com/scenari/src/feature/ids/SrcFeatureIds.java
r14833 r15098 73 73 * <p>Recherche un {@link ISrcNode} via un srcId.</p> 74 74 * 75 * @return {@link ISrc Content} 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. 76 76 * @throws AspectNotFoundException si aucun aspect ne permettant la r�lution de l'Id n'a � trouv� 77 77 */ … … 83 83 //Recherche une Uri 84 84 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 } 86 89 //Echec de la recherche par Id. 87 90 throw new AspectNotFoundException(IFindNodeByIdAspect.class.getName()); … … 183 186 * <p>Si la source est dans un �t nul {@link ISrcContent#STATUS_NONE}, force la cr�ion d'un Id pour cette Uri.</p> 184 187 * 188 * @param pAsFolder Si <code>true</code> cr�ISrcContent de type folder si n�ssaire (de type file sinon). 185 189 * @return L'id de la source ou <code>null</code> si aucun aspect de type {@link IIdAspect} n'a � trouv� 186 190 */ 187 public static String getOrCreateSrcId(ISrcContent pSrcContent ) throws Exception {191 public static String getOrCreateSrcId(ISrcContent pSrcContent, boolean pAsFolder) throws Exception { 188 192 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); 190 194 return null; 191 195 } -
trunk/Jav_Wsp/src/com/scenari/m/bdp/item/fs/HWorkspaceFs.java
r14725 r15098 555 555 fFireDiscoveredItems = vOld; 556 556 } 557 break; 558 559 case space: 560 case wsp: 561 //not implemented 562 assert (false); 557 563 } 558 564 } … … 641 647 vResult = new XItemCache(this, vSrcNode); 642 648 fItemsByUri.put(pUri, vResult); 643 String vId = SrcFeatureIds.getSrcId(vSrcNode);644 if (vId != null) {645 fItemsById.put(vId, vResult);646 }647 649 vResult.refresh(true); 648 650 } … … 657 659 * L'itemCache a � rafraichit. 658 660 * 659 * Retourne null si l' uri n'est pas une uri d'item.661 * Retourne null si l'id n'existe pas. 660 662 */ 661 663 protected XItemCache xGetItemCacheById(String pSrcId, boolean pRefresh) throws Exception { … … 665 667 ISrcNode vSrcNode = SrcFeatureIds.findNodeById(fSubSrcNode, pSrcId); 666 668 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 } 677 688 return vResult; 678 689 } … … 691 702 vResult = new XItemCache(this, pSubSrcNode); 692 703 fItemsByUri.put(pSubSrcNode.getSrcUri(), vResult); 693 String vId = SrcFeatureIds.getSrcId(pSubSrcNode);694 if (vId != null) {695 fItemsById.put(vId, vResult);696 }697 704 } 698 705 vResult.refresh(true); … … 713 720 vResult = new XItemCache(this, vSrcNode); 714 721 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); 719 723 } 720 724 if (pRefresh) vResult.refresh(true); … … 728 732 assert Thread.holdsLock(this); 729 733 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); 741 736 } 742 737 } -
trunk/Jav_Wsp/src/com/scenari/m/bdp/item/fs/WspSrcNodeItem.java
r14497 r15098 393 393 try { 394 394 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 }400 395 } finally { 401 396 //On force un revalidation de l'item source et target. 397 //FIXME sauf si listener auto sur subSrc 402 398 xValidateItem(pFrom); 403 399 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()); 404 408 } 405 409 } else { … … 428 432 protected void xValidateItem(ISrcNode pFrom) { 429 433 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 } 441 452 } 442 453 } … … 484 495 } 485 496 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 486 512 public void fillFields(IFieldsCollector pFieldsToCollect) throws Exception { 487 513 //Fields du subSource. -
trunk/Jav_Wsp/src/com/scenari/m/bdp/item/fs/XItemCache.java
r14479 r15098 44 44 import java.util.Date; 45 45 import java.util.Iterator; 46 import java.util.Map; 46 47 47 48 import org.xml.sax.Attributes; … … 149 150 if (pItemPtd != null) { 150 151 //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 } 152 157 } 153 158 } … … 348 353 protected XLink fFirstPointer = null; 349 354 350 /** Liste chain�d'items en cache (champ g� par la classe XSpace). */351 protected XItemCache fNextItem = null;352 353 355 /** Uri de cet item. */ 354 356 protected String fUri = IHItem.URI_NULL; 357 358 /** Id de cet item. */ 359 protected String fId = null; 355 360 356 361 /** ItemType de cette item. */ … … 398 403 public String getUri() { 399 404 return fUri; 405 } 406 407 public String getId() { 408 return fId; 400 409 } 401 410 … … 645 654 } 646 655 ISrcNode vSrc = vDatas.getWspSrcNodeItem().getSubSrcNode(); 656 //Refresh de l'ID. 657 this.setId(vSrc); 647 658 if (fStatusItem == IHItem.STATUS_UNKNOWN) { 648 659 xLoadItemFromSource(false, vSrc, vSrc.getLastModifWithChildren(), IContextBdp.CLIENTID_NONE); … … 834 845 XItemCacheData vItemData = getDatas(); 835 846 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; 837 870 } 838 871 … … 924 957 } 925 958 } 926 x RecalStatusItem();959 xComputeItemStatus(); 927 960 } 928 961 … … 996 1029 * Recalcul du status global de l'item apr�validation des liens notemment. 997 1030 */ 998 protected void x RecalStatusItem() {1031 protected void xComputeItemStatus() { 999 1032 //Si les liens n'ont pas � calcul�on ne fait rien. 1000 1033 boolean fHasWarning = (fFirstContentProblem != null); … … 1046 1079 public void xUnlinkChilds() throws Exception { 1047 1080 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; 1055 1099 } 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; 1071 1102 } 1072 1103 } … … 1104 1135 //On recaclule le satus de l'item pointeur si il a d� � link�sinon perte de ref lors de XSpace.xLinkAllItems). 1105 1136 if (vPointer.fItem.fStatusItem != STATUS_INTERNAL_NOTLINKED) { 1106 vPointer.fItem.x RecalStatusItem();1137 vPointer.fItem.xComputeItemStatus(); 1107 1138 if (pFireEventUpdated && vOldStatus != vPointer.fItem.fStatusItem) getWsp().xFireEventItemStatus(vPointer.fItem); 1108 1139 } -
trunk/Jav_Wsp/src/com/scenari/m/bdp/module/rename/HRenamingPlanSpace.java
r14471 r15098 75 75 String vNewUri = PoolBuffers.getStringAndFreeStringBuilder(vBuf); 76 76 if (vRefById) { 77 String vNewId = SrcFeatureIds.get SrcId(fNewSrc.findNodeByUri(vNewUri));77 String vNewId = SrcFeatureIds.getOrCreateSrcId(fNewSrc.findNodeByUri(vNewUri), false); 78 78 if (vNewId != null) { 79 79 return vNewId;