forked from google/gdata-java-client
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGoogleBaseEntry.java
More file actions
114 lines (103 loc) · 3.85 KB
/
Copy pathGoogleBaseEntry.java
File metadata and controls
114 lines (103 loc) · 3.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* Copyright (c) 2006 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.api.gbase.client;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.ExtensionProfile;
import com.google.gdata.data.extensions.FeedLink;
import java.util.List;
/**
* An object corresponding to one entry in a Google Base Atom XML file.
* This kind of entries supports tags in the g: namespace.
*
* GoogleBaseEntries are usually returned by
* {@link com.google.api.gbase.client.GoogleBaseFeed#getEntries()},
* {@link GoogleBaseService#getEntry(java.net.URL)}, but they can also
* be created independently.
*
* Depending on the feed or URL you got the Entry from, it can contain:
* <ul>
* <li>g: namespace tags ({@link #getGoogleBaseAttributes()}, if it
* is an item feed or a URL specifying an item.</li>
* <li>gm: namespace tags ({@link #getGoogleBaseMetadata()}, if it
* is a histogram or an item type.</li>
* <li>locale feeds will contain no g: or gm: namespaces whatsoever.
* You'll find the locale name in the title of the entry.</li>
* </ul>
* Items usually contain only g: tags (attributes) or only gm: tags
* (metadata) depending on their types, never both.
*/
public class GoogleBaseEntry extends BaseEntry<GoogleBaseEntry> {
private final MetadataEntryExtension metadata =
new MetadataEntryExtension(this);
private final GoogleBaseAttributesExtension googleBaseAttributesExtension;
/**
* Creates a new entry.
*/
public GoogleBaseEntry() {
googleBaseAttributesExtension = new GoogleBaseAttributesExtension();
addExtension(googleBaseAttributesExtension);
}
/**
* Accesses tags in the g: namespace.
*
* @return extension corresponding to tags in the g: namespace, never
* null but might be empty.
*/
public GoogleBaseAttributesExtension getGoogleBaseAttributes() {
return googleBaseAttributesExtension;
}
/**
* Accesses tags in the gm: namespace (attribute histogram and
* item type descriptions).
*
* The gm: tags are read-only.
*
* @return extension corresponding to tags in the gm: namespace, never
* null but might be empty
*/
public MetadataEntryExtension getGoogleBaseMetadata() {
return metadata;
}
/**
* Returns the {@link FeedLink} object pointing to the media feed,
* or null if the media feed link is not provided (e.g. the entry
* is obtained from the {@code /snippets} feed).
*
* @return the feed link pointing to the media feed, or null if
* link is not provided
*/
@SuppressWarnings("unchecked")
public FeedLink<GoogleBaseMediaFeed> getMediaFeedLink() {
List<FeedLink> extensions = getRepeatingExtension(FeedLink.class);
for (FeedLink extension : extensions) {
if ("media".equals(extension.getRel())) {
return extension;
}
}
return null;
}
/**
* Declares extensions for the g: and gm: namespaces to an extension profile.
*
* @param extProfile extension profile where the extensions will be declared
*/
@Override
public void declareExtensions(ExtensionProfile extProfile) {
// Declare arbitrary XML support for the feed instances, so any
// extensions not explicitly declared in the profile will be captured.
extProfile.declareArbitraryXmlExtension(GoogleBaseEntry.class);
GoogleBaseNamespaces.declareAllExtensions(extProfile);
}
}