001/**
002 * Copyright 2014 The Sculptor Project Team, including the original
003 * author or authors.
004 * 
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 * 
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 * 
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.sculptor.generator.cartridge.mongodb;
018
019import javax.inject.Inject;
020import org.eclipse.xtend2.lib.StringConcatenation;
021import org.eclipse.xtext.xbase.lib.Extension;
022import org.sculptor.generator.cartridge.mongodb.MongoDbProperties;
023import org.sculptor.generator.chain.ChainOverride;
024import org.sculptor.generator.ext.Helper;
025import org.sculptor.generator.ext.Properties;
026import org.sculptor.generator.template.spring.SpringTmpl;
027import org.sculptor.generator.util.OutputSlot;
028import sculptormetamodel.Application;
029
030@ChainOverride
031@SuppressWarnings("all")
032public class SpringTmplExtension extends SpringTmpl {
033  @Inject
034  @Extension
035  private Helper helper;
036  
037  @Inject
038  @Extension
039  private MongoDbProperties mongoDbProperties;
040  
041  @Inject
042  @Extension
043  private Properties properties;
044  
045  @Override
046  public String spring(final Application it) {
047    SpringTmpl headObj = getMethodsDispatchHead()[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.SPRING_APPLICATION];
048    return headObj._chained_spring(it);
049  }
050  
051  private String mongodb(final Application it) {
052    String _resourceDir = this.properties.getResourceDir(it, "spring");
053    String _plus = (_resourceDir + "mongodb.xml");
054    StringConcatenation _builder = new StringConcatenation();
055    String _header = this.header(it);
056    _builder.append(_header, "");
057    _builder.newLineIfNotEmpty();
058    _builder.append("\t");
059    String _mongodbManager = this.mongodbManager(it);
060    _builder.append(_mongodbManager, "\t");
061    _builder.newLineIfNotEmpty();
062    _builder.append("\t");
063    String _mongodbOptions = this.mongodbOptions(it);
064    _builder.append(_mongodbOptions, "\t");
065    _builder.newLineIfNotEmpty();
066    _builder.append("</beans>");
067    _builder.newLine();
068    return this.helper.fileOutput(_plus, OutputSlot.TO_GEN_RESOURCES, _builder.toString());
069  }
070  
071  private String mongodbManager(final Application it) {
072    StringConcatenation _builder = new StringConcatenation();
073    _builder.append("<bean id=\"mongodbManager\" class=\"");
074    String _fw = this.properties.fw("accessimpl.mongodb.DbManager");
075    _builder.append(_fw, "");
076    _builder.append("\">");
077    _builder.newLineIfNotEmpty();
078    _builder.append("\t");
079    _builder.append("<property name=\"dbname\" value=\"${mongodb.dbname}\" />");
080    _builder.newLine();
081    _builder.append("\t");
082    _builder.append("<property name=\"dbUrl1\" value=\"${mongodb.url1}\" />");
083    _builder.newLine();
084    _builder.append("\t");
085    _builder.append("<property name=\"dbUrl2\" value=\"${mongodb.url2}\" />");
086    _builder.newLine();
087    _builder.append("\t");
088    _builder.append("<property name=\"options\" ref=\"mongodbOptions\" />");
089    _builder.newLine();
090    _builder.append("</bean>");
091    _builder.newLine();
092    return _builder.toString();
093  }
094  
095  private String mongodbOptions(final Application it) {
096    StringConcatenation _builder = new StringConcatenation();
097    _builder.append("<bean id=\"mongodbOptions\" class=\"");
098    String _fw = this.properties.fw("accessimpl.mongodb.MongoOptionsWrapper");
099    _builder.append(_fw, "");
100    _builder.append("\">");
101    _builder.newLineIfNotEmpty();
102    _builder.append("\t");
103    _builder.append("<property name=\"connectionsPerHost\" value=\"${mongodbOptions.connectionsPerHost}\" />");
104    _builder.newLine();
105    _builder.append("\t");
106    _builder.append("<property name=\"threadsAllowedToBlockForConnectionMultiplier\" value=\"${mongodbOptions.threadsAllowedToBlockForConnectionMultiplier}\" />");
107    _builder.newLine();
108    _builder.append("\t");
109    _builder.append("<property name=\"connectTimeout\" value=\"${mongodbOptions.connectTimeout}\" />");
110    _builder.newLine();
111    _builder.append("\t");
112    _builder.append("<property name=\"socketTimeout\" value=\"${mongodbOptions.socketTimeout}\" />");
113    _builder.newLine();
114    _builder.append("\t");
115    _builder.append("<property name=\"autoConnectRetry\" value=\"${mongodbOptions.autoConnectRetry}\" />");
116    _builder.newLine();
117    _builder.append("</bean>");
118    _builder.newLine();
119    return _builder.toString();
120  }
121  
122  private String mongodbTest(final Application it) {
123    String _resourceDir = this.properties.getResourceDir(it, "spring");
124    String _plus = (_resourceDir + "mongodb-test.xml");
125    StringConcatenation _builder = new StringConcatenation();
126    String _header = this.header(it);
127    _builder.append(_header, "");
128    _builder.newLineIfNotEmpty();
129    _builder.append("\t");
130    String _mongodbManagerTest = this.mongodbManagerTest(it);
131    _builder.append(_mongodbManagerTest, "\t");
132    _builder.newLineIfNotEmpty();
133    _builder.append("\t");
134    String _mongodbOptions = this.mongodbOptions(it);
135    _builder.append(_mongodbOptions, "\t");
136    _builder.newLineIfNotEmpty();
137    _builder.append("</beans>");
138    _builder.newLine();
139    return this.helper.fileOutput(_plus, OutputSlot.TO_GEN_RESOURCES_TEST, _builder.toString());
140  }
141  
142  private String mongodbManagerTest(final Application it) {
143    StringConcatenation _builder = new StringConcatenation();
144    _builder.append("<bean id=\"mongodbManager\" class=\"");
145    String _fw = this.properties.fw("accessimpl.mongodb.DbManager");
146    _builder.append(_fw, "");
147    _builder.append("\">");
148    _builder.newLineIfNotEmpty();
149    _builder.append("\t");
150    _builder.append("<property name=\"dbname\" value=\"");
151    String _name = it.getName();
152    _builder.append(_name, "\t");
153    _builder.append("-test\" />");
154    _builder.newLineIfNotEmpty();
155    _builder.append("\t");
156    _builder.append("<property name=\"dbUrl1\" value=\"${mongodb.url1}\" />");
157    _builder.newLine();
158    _builder.append("\t");
159    _builder.append("<property name=\"dbUrl2\" value=\"${mongodb.url2}\" />");
160    _builder.newLine();
161    _builder.append("\t");
162    _builder.append("<property name=\"options\" ref=\"mongodbOptions\" />");
163    _builder.newLine();
164    _builder.append("</bean>");
165    _builder.newLine();
166    return _builder.toString();
167  }
168  
169  @Override
170  public String applicationContextAdditions(final Application it) {
171    SpringTmpl headObj = getMethodsDispatchHead()[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.APPLICATIONCONTEXTADDITIONS_APPLICATION];
172    return headObj._chained_applicationContextAdditions(it);
173  }
174  
175  @Override
176  public String applicationContextTestAdditions(final Application it) {
177    SpringTmpl headObj = getMethodsDispatchHead()[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.APPLICATIONCONTEXTTESTADDITIONS_APPLICATION];
178    return headObj._chained_applicationContextTestAdditions(it);
179  }
180  
181  @Override
182  public String generatedSpringPropertiesAdditions(final Application it) {
183    SpringTmpl headObj = getMethodsDispatchHead()[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.GENERATEDSPRINGPROPERTIESADDITIONS_APPLICATION];
184    return headObj._chained_generatedSpringPropertiesAdditions(it);
185  }
186  
187  @Override
188  public String interceptorAdditions(final Application it) {
189    SpringTmpl headObj = getMethodsDispatchHead()[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.INTERCEPTORADDITIONS_APPLICATION];
190    return headObj._chained_interceptorAdditions(it);
191  }
192  
193  @Override
194  public String aopConfigAdditions(final Application it, final boolean test) {
195    SpringTmpl headObj = getMethodsDispatchHead()[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.AOPCONFIGADDITIONS_APPLICATION_BOOLEAN];
196    return headObj._chained_aopConfigAdditions(it, test);
197  }
198  
199  public SpringTmplExtension(final SpringTmpl next, final SpringTmpl[] methodsDispatchNext) {
200    super(next);
201  }
202  
203  public String _chained_spring(final Application it) {
204    StringConcatenation _builder = new StringConcatenation();
205    SpringTmpl _next = this.getNext();
206    String _spring = _next.spring(it);
207    _builder.append(_spring, "");
208    _builder.newLineIfNotEmpty();
209    {
210      boolean _mongoDb = this.mongoDbProperties.mongoDb();
211      if (_mongoDb) {
212        String _mongodb = this.mongodb(it);
213        _builder.append(_mongodb, "");
214        _builder.newLineIfNotEmpty();
215        {
216          boolean _isTestToBeGenerated = this.properties.isTestToBeGenerated();
217          if (_isTestToBeGenerated) {
218            String _mongodbTest = this.mongodbTest(it);
219            _builder.append(_mongodbTest, "");
220            _builder.newLineIfNotEmpty();
221          }
222        }
223      }
224    }
225    return _builder.toString();
226  }
227  
228  public String _chained_applicationContextAdditions(final Application it) {
229    StringConcatenation _builder = new StringConcatenation();
230    {
231      boolean _mongoDb = this.mongoDbProperties.mongoDb();
232      if (_mongoDb) {
233        _builder.append("<import resource=\"classpath:/");
234        String _resourceDir = this.properties.getResourceDir(it, "spring");
235        String _applicationContextFile = this.properties.getApplicationContextFile(it, "mongodb.xml");
236        String _plus = (_resourceDir + _applicationContextFile);
237        _builder.append(_plus, "");
238        _builder.append("\"/>");
239        _builder.newLineIfNotEmpty();
240      }
241    }
242    return _builder.toString();
243  }
244  
245  public String _chained_applicationContextTestAdditions(final Application it) {
246    StringConcatenation _builder = new StringConcatenation();
247    {
248      boolean _mongoDb = this.mongoDbProperties.mongoDb();
249      if (_mongoDb) {
250        _builder.append("<import resource=\"classpath:/");
251        String _resourceDir = this.properties.getResourceDir(it, "spring");
252        String _applicationContextFile = this.properties.getApplicationContextFile(it, "mongodb-test.xml");
253        String _plus = (_resourceDir + _applicationContextFile);
254        _builder.append(_plus, "");
255        _builder.append("\"/>");
256        _builder.newLineIfNotEmpty();
257      }
258    }
259    return _builder.toString();
260  }
261  
262  public String _chained_generatedSpringPropertiesAdditions(final Application it) {
263    StringConcatenation _builder = new StringConcatenation();
264    {
265      boolean _mongoDb = this.mongoDbProperties.mongoDb();
266      if (_mongoDb) {
267        _builder.append("mongodb.dbname=");
268        String _name = it.getName();
269        _builder.append(_name, "");
270        _builder.newLineIfNotEmpty();
271        _builder.append("mongodb.url1=localhost:27017");
272        _builder.newLine();
273        _builder.append("mongodb.url2=");
274        _builder.newLine();
275        _builder.append("mongodbOptions.connectionsPerHost=10");
276        _builder.newLine();
277        _builder.append("mongodbOptions.threadsAllowedToBlockForConnectionMultiplier=5");
278        _builder.newLine();
279        _builder.append("mongodbOptions.connectTimeout=0");
280        _builder.newLine();
281        _builder.append("mongodbOptions.socketTimeout=0");
282        _builder.newLine();
283        _builder.append("mongodbOptions.autoConnectRetry=false");
284        _builder.newLine();
285      }
286    }
287    return _builder.toString();
288  }
289  
290  public String _chained_interceptorAdditions(final Application it) {
291    StringConcatenation _builder = new StringConcatenation();
292    {
293      boolean _mongoDb = this.mongoDbProperties.mongoDb();
294      if (_mongoDb) {
295        _builder.append("<bean id=\"mongodbManagerAdvice\" class=\"");
296        String _fw = this.properties.fw("accessimpl.mongodb.DbManagerAdvice");
297        _builder.append(_fw, "");
298        _builder.append("\" >");
299        _builder.newLineIfNotEmpty();
300        _builder.append("\t");
301        _builder.append("<property name=\"dbManager\" ref=\"mongodbManager\" />");
302        _builder.newLine();
303        _builder.append("</bean>");
304        _builder.newLine();
305      }
306    }
307    return _builder.toString();
308  }
309  
310  public String _chained_aopConfigAdditions(final Application it, final boolean test) {
311    StringConcatenation _builder = new StringConcatenation();
312    {
313      boolean _mongoDb = this.mongoDbProperties.mongoDb();
314      if (_mongoDb) {
315        {
316          if ((!test)) {
317            _builder.append("<aop:advisor pointcut-ref=\"businessService\" advice-ref=\"mongodbManagerAdvice\" order=\"5\" />");
318            _builder.newLine();
319            {
320              boolean _hasConsumers = this.helper.hasConsumers(it);
321              if (_hasConsumers) {
322                _builder.append("<aop:advisor pointcut-ref=\"messageConsumer\" advice-ref=\"mongodbManagerAdvice\" order=\"5\" />");
323                _builder.newLine();
324              }
325            }
326          }
327        }
328      }
329    }
330    return _builder.toString();
331  }
332  
333  public SpringTmpl[] _getOverridesDispatchArray() {
334    org.sculptor.generator.template.spring.SpringTmpl[] result = new org.sculptor.generator.template.spring.SpringTmpl[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.NUM_METHODS];
335    result[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.SPRING_APPLICATION] = this; 
336    result[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.APPLICATIONCONTEXTADDITIONS_APPLICATION] = this; 
337    result[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.APPLICATIONCONTEXTTESTADDITIONS_APPLICATION] = this; 
338    result[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.GENERATEDSPRINGPROPERTIESADDITIONS_APPLICATION] = this; 
339    result[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.INTERCEPTORADDITIONS_APPLICATION] = this; 
340    result[org.sculptor.generator.template.spring.SpringTmplMethodIndexes.AOPCONFIGADDITIONS_APPLICATION_BOOLEAN] = this; 
341    return result;
342  }
343}