Changeset 15098
- Timestamp:
- 03/14/10 09:12:55 (2 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
-
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é ou <code>null</code> si pSrcId est <code>null</code>.75 * @return {@link ISrcNode} trouvé ou <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ésolution de l'Id n'a été 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 état nul {@link ISrcContent#STATUS_NONE}, force la création d'un Id pour cette Uri.</p> 184 187 * 188 * @param pAsFolder Si <code>true</code> créé ISrcContent de type folder si nécessaire (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 été 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 été 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 était 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 été modifié au 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éévaluer 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 } … … 485 496 } 486 497 498 /** 499 * Revalide les items pointeurs de cet item suite à un renommage. 500 */ 501 protected void xRefreshPointers(String pUriFrom) throws Exception { 502 //On transforme les items pointeurs sur pFrom 503 ISearchRequestEditable vReq = SrcFeatureSearch.newRequest(); 504 vReq.setMainExpression(new LinkParents().setStartPath(pUriFrom)); 505 Iterator<ISearchResultRow> vIt = SrcFeatureSearch.execute(vReq, getWorkspace().findNodeByUri(URI_ROOT)); 506 while (vIt.hasNext()) { 507 XItemCache vItemCache = fItemCacheData.getItemCache().getWsp().xGetOrCreateItemCache(vIt.next().getRowUri(), false); 508 vItemCache.xUnlinkChilds(); 509 vItemCache.xLinkChilds(); 510 } 511 } 512 487 513 public void fillFields(IFieldsCollector pFieldsToCollect) throws Exception { 488 514 //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émoire 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ée d'items en cache (champ géré 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 à jour 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 … … 997 1030 * Recalcul du status global de l'item après validation des liens notemment. 998 1031 */ 999 protected void x RecalStatusItem() {1032 protected void xComputeItemStatus() { 1000 1033 //Si les liens n'ont pas été calculés on ne fait rien. 1001 1034 boolean fHasWarning = (fFirstContentProblem != null); … … 1047 1080 public void xUnlinkChilds() throws Exception { 1048 1081 if (fAttrs == null || fStatusItem == STATUS_INTERNAL_NOTLINKED) { return; } 1049 if (fAttrs != null) { 1050 for (int i = 0; i < fAttrs.length; i = i + 4) { 1051 if (fAttrs[i] == IHAttr.TYPE_REF || fAttrs[i] == IHAttr.TYPE_LINK) { 1052 XLink vLink = (XLink) fAttrs[i + 3]; 1053 XItemCache vPtd = vLink.fPtd; 1054 if (vPtd == null) { 1055 continue; 1082 for (int i = 0; i < fAttrs.length; i = i + 4) { 1083 if (fAttrs[i] == IHAttr.TYPE_REF || fAttrs[i] == IHAttr.TYPE_LINK) { 1084 XLink vLink = (XLink) fAttrs[i + 3]; 1085 XItemCache vPtd = vLink.fPtd; 1086 if (vPtd == null) { 1087 continue; 1088 } 1089 XLink vPrec = null; 1090 XLink vCurr = vPtd.fFirstPointer; 1091 while (vCurr != null) { 1092 //On recherche ce pointeur dans le Ptd 1093 if (vCurr == vLink) { 1094 //Trouvé 1095 if (vPrec != null) { 1096 vPrec.fNextPointer = vCurr.fNextPointer; 1097 } else { 1098 vPtd.fFirstPointer = vCurr.fNextPointer; 1099 } 1100 break; 1056 1101 } 1057 XLink vPrec = null; 1058 XLink vCurr = vPtd.fFirstPointer; 1059 while (vCurr != null) { 1060 //On recherche ce pointeur dans le Ptd 1061 if (vCurr == vLink) { 1062 //Trouvé 1063 if (vPrec != null) { 1064 vPrec.fNextPointer = vCurr.fNextPointer; 1065 } else { 1066 vPtd.fFirstPointer = vCurr.fNextPointer; 1067 } 1068 break; 1069 } 1070 vPrec = vCurr; 1071 vCurr = vCurr.fNextPointer; 1072 } 1102 vPrec = vCurr; 1103 vCurr = vCurr.fNextPointer; 1073 1104 } 1074 1105 } … … 1106 1137 //On recaclule le satus de l'item pointeur si il a déjà été linké (sinon perte de ref lors de XSpace.xLinkAllItems). 1107 1138 if (vPointer.fItem.fStatusItem != STATUS_INTERNAL_NOTLINKED) { 1108 vPointer.fItem.x RecalStatusItem();1139 vPointer.fItem.xComputeItemStatus(); 1109 1140 if (pFireEventUpdated && vOldStatus != vPointer.fItem.fStatusItem) getWsp().xFireEventItemStatus(vPointer.fItem); 1110 1141 } -
trunk/Jav_Wsp/src/com/scenari/m/bdp/module/rename/HRenamingPlanSpace.java
r14471 r15098 76 76 String vNewUri = PoolBuffers.getStringAndFreeStringBuilder(vBuf); 77 77 if (vRefById) { 78 String vNewId = SrcFeatureIds.get SrcId(fNewSrc.findNodeByUri(vNewUri));78 String vNewId = SrcFeatureIds.getOrCreateSrcId(fNewSrc.findNodeByUri(vNewUri), false); 79 79 if (vNewId != null) { 80 80 return vNewId;
Note: See TracChangeset
for help on using the changeset viewer.