1 // Copyright 2010 Google Inc. All Rights Reserved.
3 package com
.google
.apphosting
.utils
.config
;
6 import java
.io
.FileReader
;
7 import java
.io
.FileNotFoundException
;
9 import java
.io
.StringReader
;
10 import java
.util
.ArrayList
;
11 import java
.util
.List
;
12 import net
.sourceforge
.yamlbeans
.YamlException
;
13 import net
.sourceforge
.yamlbeans
.YamlReader
;
16 * Class to parse queue.yaml into a QueueXml object.
19 public class QueueYamlReader
{
22 * Wrapper around QueueXml to match JavaBean properties to
23 * the yaml file syntax.
25 public static class QueueYaml
{
28 * Wrapper around QueueXml.RetryParameters to match the JavaBean
29 * properties to the yaml file syntax.
31 public static class RetryParameters
{
32 private QueueXml
.RetryParameters retryParameters
= new QueueXml
.RetryParameters();
34 public RetryParameters() {}
36 public void setTask_retry_limit(int limit
) {
37 retryParameters
.setRetryLimit(limit
);
39 public int getTask_retry_limit() {
40 return retryParameters
.getRetryLimit();
42 public void setTask_age_limit(String ageLimit
) {
43 retryParameters
.setAgeLimitSec(ageLimit
);
45 public String
getTask_age_limit() {
46 return retryParameters
.getAgeLimitSec().toString() + "s";
48 public void setMin_backoff_seconds(double backoff
) {
49 retryParameters
.setMinBackoffSec(backoff
);
51 public double getMin_backoff_seconds() {
52 return retryParameters
.getMinBackoffSec();
54 public void setMax_backoff_seconds(double backoff
) {
55 retryParameters
.setMaxBackoffSec(backoff
);
57 public double getMax_backoff_seconds() {
58 return retryParameters
.getMaxBackoffSec();
60 public void setMax_doublings(int doublings
) {
61 retryParameters
.setMaxDoublings(doublings
);
63 public int getMax_doublings() {
64 return retryParameters
.getMaxDoublings();
66 public QueueXml
.RetryParameters
toXml() {
67 return retryParameters
;
71 public static class AclEntry
{
72 QueueXml
.AclEntry acl
= new QueueXml
.AclEntry();
74 public void setUser_email(String userEmail
) {
75 acl
.setUserEmail(userEmail
);
78 public String
getUser_email() {
79 return acl
.getUserEmail();
82 public void setWriter_email(String writerEmail
) {
83 acl
.setWriterEmail(writerEmail
);
86 public String
getWriter_email() {
87 return acl
.getWriterEmail();
90 public QueueXml
.AclEntry
toXml() {
96 * Wrapper around QueueXml.Entry to match the JavaBean properties to
97 * the yaml file syntax.
99 public static class Entry
{
100 private QueueXml
.Entry entry
= new QueueXml
.Entry();
101 private RetryParameters retryParameters
;
102 private List
<AclEntry
> acl
;
103 public void setName(String name
) {
106 public String
getName() {
107 return entry
.getName();
109 public void setRate(String rate
) {
112 public String
getRate() {
113 return entry
.getRate() + "/" + entry
.getRateUnit().getIdent();
115 public void setBucket_size(int size
) {
116 entry
.setBucketSize(size
);
118 public int getBucket_size() {
119 return entry
.getBucketSize();
121 public void setMax_concurrent_requests(int size
) {
122 entry
.setMaxConcurrentRequests(size
);
124 public int getMax_concurrent_requests() {
125 return entry
.getMaxConcurrentRequests();
127 public void setRetry_parameters(RetryParameters retryParameters
) {
128 this.retryParameters
= retryParameters
;
129 if (retryParameters
!= null) {
130 entry
.setRetryParameters(retryParameters
.toXml());
132 entry
.setRetryParameters(new QueueXml
.RetryParameters());
135 public RetryParameters
getRetry_parameters() {
136 return retryParameters
;
138 public void setTarget(String target
) {
139 entry
.setTarget(target
);
141 public String
getTarget() {
142 return entry
.getTarget();
144 public void setMode(String mode
) {
147 public String
getMode() {
148 return entry
.getMode();
150 public void setAcl(List
<AclEntry
> acl
) {
152 entry
.setAcl(new ArrayList
<QueueXml
.AclEntry
>());
154 for (int i
= 0; i
< acl
.size(); ++i
) {
155 AclEntry aclEntry
= acl
.get(i
);
156 entry
.addAcl(aclEntry
.toXml());
160 public List
<AclEntry
> getAcl() {
163 public QueueXml
.Entry
toXml() {
168 private List
<Entry
> entries
;
169 public String total_storage_limit
;
171 public List
<Entry
> getQueue() {
175 public void setQueue(List
<Entry
> entries
) {
176 this.entries
= entries
;
179 public QueueXml
toXml() {
180 QueueXml xml
= new QueueXml();
181 if (total_storage_limit
!= null) {
182 xml
.setTotalStorageLimit(total_storage_limit
);
184 if (entries
!= null) {
185 for (Entry entry
: entries
) {
186 xml
.addEntry(entry
.toXml());
193 private static final String FILENAME
= "queue.yaml";
194 private String appDir
;
196 public QueueYamlReader(String appDir
) {
197 if (appDir
.length() > 0 && appDir
.charAt(appDir
.length() - 1) != File
.separatorChar
) {
198 appDir
+= File
.separatorChar
;
200 this.appDir
= appDir
;
203 public String
getFilename() {
204 return appDir
+ QueueYamlReader
.FILENAME
;
207 public QueueXml
parse() {
208 if (new File(getFilename()).exists()) {
210 return parse(new FileReader(getFilename()));
211 } catch (FileNotFoundException ex
) {
212 throw new AppEngineConfigException("Cannot find file " + getFilename(), ex
);
218 public static QueueXml
parse(Reader yaml
) {
219 YamlReader reader
= new YamlReader(yaml
);
220 reader
.getConfig().setPropertyElementType(QueueYaml
.class,
222 QueueYaml
.Entry
.class);
224 reader
.getConfig().setPropertyElementType(QueueYaml
.Entry
.class,
226 QueueYaml
.AclEntry
.class);
228 QueueYaml queueYaml
= reader
.read(QueueYaml
.class);
229 if (queueYaml
== null) {
230 throw new AppEngineConfigException("Empty queue configuration.");
232 return queueYaml
.toXml();
233 } catch (YamlException ex
) {
234 throw new AppEngineConfigException(ex
.getMessage(), ex
);
238 public static QueueXml
parse(String yaml
) {
239 return parse(new StringReader(yaml
));