/*
* #%L
* ACS AEM Tools Bundle
* %%
* Copyright (C) 2013 Adobe
* %%
* 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.
* #L%
*/
package com.adobe.acs.tools.test_page_generator.impl;
import org.apache.commons.lang.StringUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.commons.json.JSONArray;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Parameters {
private static final Logger log = LoggerFactory.getLogger(Parameters.class);
private static final int DEFAULT_SAVE_THRESHOLD = 1000;
private static final int DEFAULT_BUCKET_SIZE = 100;
private static final String DEFAULT_BUCKET_TYPE = "sling:Folder";
private final String rootPath;
private final String template;
private final int total;
private final int bucketSize;
private final int saveThreshold;
private final String bucketType;
private final Map<String, Object> properties;
public Parameters(SlingHttpServletRequest request) throws JSONException {
final String data = request.getParameter("json");
JSONObject json = new JSONObject(data);
rootPath = json.optString("rootPath", "");
template = json.optString("template", "");
total = json.optInt("total", 0);
bucketSize = json.optInt("bucketSize", DEFAULT_BUCKET_SIZE);
bucketType = json.optString("bucketType", DEFAULT_BUCKET_TYPE);
saveThreshold = json.optInt("saveThreshold", DEFAULT_SAVE_THRESHOLD);
properties = new HashMap<String, Object>();
JSONArray jsonArray = json.getJSONArray("properties");
if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
final JSONObject item = jsonArray.getJSONObject(i);
boolean isMulti = item.optBoolean("multi", false);
String name = item.optString("name", "");
if (StringUtils.isNotBlank(name)) {
if (isMulti) {
final List<String> values = new ArrayList<String>();
for (String value : StringUtils.split(item.optString("value", ""), ",")) {
final String tmp = StringUtils.stripToNull(value);
if (tmp != null) {
values.add(value);
}
}
properties.put(name, values.toArray(new String[values.size()]));
} else {
String value = item.optString("value", "");
properties.put(name, value);
}
}
}
}
}
public final String getRootPath() {
if (!StringUtils.isBlank(this.rootPath)) {
return rootPath;
} else {
return "/content" + "/" + Long.toString(new Date().getTime());
}
}
public final String getTemplate() {
return template;
}
public final int getTotal() {
if (total > 0) {
return total;
} else {
return 0;
}
}
public final int getBucketSize() {
if (bucketSize > 0) {
return bucketSize;
} else {
return DEFAULT_BUCKET_SIZE;
}
}
public final String getBucketType() {
return StringUtils.defaultIfEmpty(this.bucketType, DEFAULT_BUCKET_TYPE);
}
public final int getSaveThreshold() {
if (saveThreshold > 0) {
return saveThreshold;
} else {
return DEFAULT_SAVE_THRESHOLD;
}
}
public final Map<String, Object> getProperties() {
return properties;
}
public final String toString() {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
printWriter.println("Template: " + this.getTemplate());
printWriter.println("Total Pages to Create: " + this.getTotal());
printWriter.println("Bucket Size: " + this.getBucketSize());
printWriter.println("Bucket Type: " + this.getBucketType());
printWriter.println("Save Threshold: " + this.getSaveThreshold());
return printWriter.toString();
}
}