App Engine Java SDK version 1.9.25
[gae.git] / java / src / main / com / google / apphosting / utils / config / QueueYamlReader.java
blob717f5059bdfbb36bb03118c5a082343cd60fdeed
1 // Copyright 2010 Google Inc. All Rights Reserved.
3 package com.google.apphosting.utils.config;
5 import java.io.File;
6 import java.io.FileReader;
7 import java.io.FileNotFoundException;
8 import java.io.Reader;
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;
15 /**
16 * Class to parse queue.yaml into a QueueXml object.
19 public class QueueYamlReader {
21 /**
22 * Wrapper around QueueXml to match JavaBean properties to
23 * the yaml file syntax.
25 public static class QueueYaml {
27 /**
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() {
91 return acl;
95 /**
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) {
104 entry.setName(name);
106 public String getName() {
107 return entry.getName();
109 public void setRate(String rate) {
110 entry.setRate(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());
131 } else {
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) {
145 entry.setMode(mode);
147 public String getMode() {
148 return entry.getMode();
150 public void setAcl(List<AclEntry> acl) {
151 this.acl = acl;
152 entry.setAcl(new ArrayList<QueueXml.AclEntry>());
153 if (acl != null) {
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() {
161 return acl;
163 public QueueXml.Entry toXml() {
164 return entry;
168 private List<Entry> entries;
169 public String total_storage_limit;
171 public List<Entry> getQueue() {
172 return entries;
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());
189 return xml;
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()) {
209 try {
210 return parse(new FileReader(getFilename()));
211 } catch (FileNotFoundException ex) {
212 throw new AppEngineConfigException("Cannot find file " + getFilename(), ex);
215 return null;
218 public static QueueXml parse(Reader yaml) {
219 YamlReader reader = new YamlReader(yaml);
220 reader.getConfig().setPropertyElementType(QueueYaml.class,
221 "queue",
222 QueueYaml.Entry.class);
224 reader.getConfig().setPropertyElementType(QueueYaml.Entry.class,
225 "acl",
226 QueueYaml.AclEntry.class);
227 try {
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));