1920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson/*
2920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Copyright (C) 2010 Google Inc.
3920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
4920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Licensed under the Apache License, Version 2.0 (the "License");
5920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * you may not use this file except in compliance with the License.
6920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * You may obtain a copy of the License at
7920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
8920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * http://www.apache.org/licenses/LICENSE-2.0
9920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson *
10920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * Unless required by applicable law or agreed to in writing, software
11920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * distributed under the License is distributed on an "AS IS" BASIS,
12920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * See the License for the specific language governing permissions and
14920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson * limitations under the License.
15920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson */
16920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
17920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonpackage com.google.doclava;
18920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
19920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport com.google.clearsilver.jsilver.data.Data;
20920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
216ba612efffba42bec102ac58a1540496158f747eAndrew Sappersteinimport java.util.ArrayList;
22920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.LinkedHashSet;
23920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodsonimport java.util.Set;
24920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
256ba612efffba42bec102ac58a1540496158f747eAndrew Sappersteinpublic abstract class DocInfo {
26920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public DocInfo(String rawCommentText, SourcePositionInfo sp) {
27920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mRawCommentText = rawCommentText;
28920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mPosition = sp;
29920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
30920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
31920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  /**
32920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   * The relative path to a web page representing this item.
33920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson   */
34920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public abstract String htmlPage();
355118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu
365118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu  /**
375118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   * @return true if the element has never been a part of public API
385118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   */
39920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isHidden() {
40920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return comment().isHidden();
41920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
42920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
435118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu  /**
445118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   * @return true if the element was once a part of public API, now removed.
455118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   */
465118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu  public boolean isRemoved() {
475118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu    return comment().isRemoved();
485118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu  }
495118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu
505118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu  /**
515118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   * Hidden and removed elements should not be appear in api.txt files, nor
525118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   * should they appear in the java doc.
535118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   * @return true if the element is either hidden or removed.
545118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   */
555118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu  public boolean isHiddenOrRemoved() {
565118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu   return isHidden() || isRemoved();
575118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu  }
585118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu
59920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public boolean isDocOnly() {
60920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return comment().isDocOnly();
61920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
62920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
63920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String getRawCommentText() {
64920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mRawCommentText;
65920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
66920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
67d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein  public void setRawCommentText(String rawCommentText) {
68d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      mRawCommentText = rawCommentText;
69d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein
70d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      // so that if we've created one prior to changing, we recreate it
71d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      if (mComment != null) {
72d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein          mComment = new Comment(mRawCommentText, parent(), mPosition);
73d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      }
74d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein
75d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein  }
76d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein
77920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public Comment comment() {
78920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    if (mComment == null) {
79920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      mComment = new Comment(mRawCommentText, parent(), mPosition);
80920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
81920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mComment;
82920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
83920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
84920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public SourcePositionInfo position() {
85920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mPosition;
86920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
87920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
88d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein  public void setPosition(SourcePositionInfo position) {
89d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      mPosition = position;
90d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein
91d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      // so that if we've created one prior to changing, we recreate it
92d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      if (mComment != null) {
93d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein          mComment = new Comment(mRawCommentText, parent(), mPosition);
94d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein      }
95d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein  }
96d6eaacbb9eb56763d38a3815fc509b92ed98a585Andrew Sapperstein
97920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public abstract ContainerInfo parent();
98920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
99920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public void setSince(String since) {
100920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mSince = since;
101920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
102920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
103920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public String getSince() {
104920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mSince;
105920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
1065118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu
10740ad14799644f497483efe6d1350c856d46bc4daScott Main  public void setDeprecatedSince(String since) {
10840ad14799644f497483efe6d1350c856d46bc4daScott Main    mDeprecatedSince = since;
10940ad14799644f497483efe6d1350c856d46bc4daScott Main  }
11040ad14799644f497483efe6d1350c856d46bc4daScott Main
11140ad14799644f497483efe6d1350c856d46bc4daScott Main  public String getDeprecatedSince() {
11240ad14799644f497483efe6d1350c856d46bc4daScott Main    return mDeprecatedSince;
11340ad14799644f497483efe6d1350c856d46bc4daScott Main  }
11440ad14799644f497483efe6d1350c856d46bc4daScott Main
11568a238ae4243e6f0f2a370b8b915ef0686ca0b37Scott Main  public boolean isDeprecated() {
11668a238ae4243e6f0f2a370b8b915ef0686ca0b37Scott Main    return mDeprecatedSince != null ? true : false;
11768a238ae4243e6f0f2a370b8b915ef0686ca0b37Scott Main  }
11868a238ae4243e6f0f2a370b8b915ef0686ca0b37Scott Main
119920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public final void addFederatedReference(FederatedSite source) {
120920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    mFederatedReferences.add(source);
121920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
1225118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu
123920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public final Set<FederatedSite> getFederatedReferences() {
124920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    return mFederatedReferences;
125920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
1265118ffe3bf77ec4efa070f36a7a62fd5d1bf16bfHui Shu
127920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  public final void setFederatedReferences(Data data, String base) {
128920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    int pos = 0;
129920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    for (FederatedSite source : getFederatedReferences()) {
130920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      data.setValue(base + ".federated." + pos + ".url", source.linkFor(htmlPage()));
131920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      data.setValue(base + ".federated." + pos + ".name", source.name());
132920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson      pos++;
133920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson    }
134920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  }
135920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson
136920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private String mRawCommentText;
137920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  Comment mComment;
138920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  SourcePositionInfo mPosition;
139920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private String mSince;
14040ad14799644f497483efe6d1350c856d46bc4daScott Main  private String mDeprecatedSince;
141920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson  private Set<FederatedSite> mFederatedReferences = new LinkedHashSet<FederatedSite>();
142920dbbbaca6aa578f3b26d89e99d12754c26ed60Ben Dodson}
143