KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > repository > serverimpl > linkextraction > LinkCollectorImpl


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.outerj.daisy.repository.serverimpl.linkextraction;
17
18 import org.outerj.daisy.repository.commonimpl.variant.CommonVariantManager;
19 import org.outerj.daisy.repository.commonimpl.AuthenticatedUser;
20 import org.outerj.daisy.linkextraction.LinkCollector;
21 import org.outerj.daisy.linkextraction.LinkType;
22 import org.outerj.daisy.repository.RepositoryException;
23 import org.outerj.daisy.util.Constants;
24
25 import java.util.HashMap JavaDoc;
26 import java.util.Collection JavaDoc;
27 import java.util.regex.Matcher JavaDoc;
28
29 public class LinkCollectorImpl implements LinkCollector {
30     private HashMap JavaDoc linksByKey = new HashMap JavaDoc();
31     private long sourceDocId;
32     private long sourceBranchId;
33     private long sourceLanguageId;
34     private long sourcePartId;
35     private boolean inLastVersion;
36     private boolean inLiveVersion;
37     private CommonVariantManager variantManager;
38     private AuthenticatedUser systemUser;
39
40     protected LinkCollectorImpl(long sourceDocId, long sourceBranchId, long sourceLanguageId,
41                             CommonVariantManager variantManager, AuthenticatedUser systemUser) {
42         this.sourceDocId = sourceDocId;
43         this.sourceBranchId = sourceBranchId;
44         this.sourceLanguageId = sourceLanguageId;
45         this.variantManager = variantManager;
46         this.systemUser = systemUser;
47     }
48
49     protected void changeTo(long sourcePartId, boolean inLastVersion, boolean inLiveVersion) {
50         this.sourcePartId = sourcePartId;
51         this.inLastVersion = inLastVersion;
52         this.inLiveVersion = inLiveVersion;
53     }
54
55     public void addLink(LinkType linkType, long targetDocId, long targetBranchId, long targetLanguageId, long version) {
56         LinkInfo linkInfo = new LinkInfo(sourceDocId, sourceBranchId, sourceLanguageId, sourcePartId, inLastVersion, inLiveVersion, targetDocId, targetBranchId, targetLanguageId, version, linkType);
57         addLink(linkInfo);
58     }
59
60     private void addLink(LinkInfo linkInfo) {
61         String JavaDoc key = linkInfo.getKey();
62         LinkInfo existingLinkInfo = (LinkInfo)linksByKey.get(key);
63         if (existingLinkInfo != null)
64             existingLinkInfo.merge(linkInfo);
65         else
66             linksByKey.put(key, linkInfo);
67     }
68
69     public void addLink(LinkType linkType, String JavaDoc daisyLink) {
70         long[] target = getDaisyLink(daisyLink);
71         if (target != null)
72             addLink(new LinkInfo(sourceDocId, sourceBranchId, sourceLanguageId, sourcePartId, inLastVersion, inLiveVersion, target[0], target[1], target[2], target[3], linkType));
73     }
74
75     public void addLink(LinkType linkType, long documentId, long branchId, long languageId) {
76         addLink(new LinkInfo(sourceDocId, sourceBranchId, sourceLanguageId, sourcePartId, inLastVersion, inLiveVersion, documentId, branchId, languageId, -1, linkType));
77     }
78
79     public long getBranchId(String JavaDoc branchNameOrId) throws RepositoryException {
80         return variantManager.getBranch(branchNameOrId, false, systemUser).getId();
81     }
82
83     public long getLanguageId(String JavaDoc languageNameOrId) throws RepositoryException {
84         return variantManager.getLanguage(languageNameOrId, false, systemUser).getId();
85     }
86
87     public Collection JavaDoc getLinks() {
88         return linksByKey.values();
89     }
90
91     protected long[] getDaisyLink(String JavaDoc link) {
92         if (link != null) {
93             Matcher JavaDoc matcher = Constants.DAISY_LINK_PATTERN.matcher(link);
94             if (matcher.matches()) {
95                 long targetDocumentId = Long.parseLong(matcher.group(1));
96
97                 String JavaDoc branchString = matcher.group(3);
98                 String JavaDoc languageString = matcher.group(5);
99                 String JavaDoc versionString = matcher.group(7);
100
101                 long targetBranchId;
102                 long targetLanguageId;
103                 long targetVersionId = -1; // -1 == live version
104

105                 if (branchString == null || branchString.length() == 0) {
106                     targetBranchId = sourceBranchId;
107                 } else {
108                     try {
109                         targetBranchId = variantManager.getBranch(branchString, false, systemUser).getId();
110                     } catch (RepositoryException e) {
111                         // skip this link
112
return null;
113                     }
114                 }
115
116                 if (languageString == null || languageString.length() == 0) {
117                     targetLanguageId = sourceLanguageId;
118                 } else {
119                     if (Character.isDigit(languageString.charAt(0))) {
120                         targetLanguageId = Long.parseLong(languageString);
121                     } else {
122                         try {
123                             targetLanguageId = variantManager.getLanguage(languageString, false, systemUser).getId();
124                         } catch (RepositoryException e) {
125                             // skip this link
126
return null;
127                         }
128                     }
129                 }
130
131                 if (versionString != null) {
132                     if (versionString.equals("LAST")) {
133                         targetVersionId = -2; // -2 == last version
134
} else {
135                         targetVersionId = Long.parseLong(versionString);
136                     }
137                 }
138                 return new long[] {targetDocumentId, targetBranchId, targetLanguageId, targetVersionId};
139             }
140         }
141         return null;
142     }
143 }
144
145
Popular Tags