/*
* #%L
* ACS AEM Commons 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.commons.quickly.results;
import com.day.cq.wcm.api.AuthoringUIMode;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Represents a Quickly Result
*/
public class Result {
public enum Mode {
DEV("dev"),
ANY("any");
private final String value;
Mode(final String value) {
this.value = value;
}
public String toString() {
return this.value;
}
}
private Action action;
private AuthoringUIMode authoringMode;
private String description;
private List<Mode> modes;
private String path;
private String resultType;
private Action secondaryAction;
private String title;
private Result(final Builder builder) {
this.setResultType(builder.resultType);
this.setTitle(builder.title);
this.setDescription(builder.description);
this.setPath(builder.path);
this.setAction(builder.action);
this.setSecondaryAction(builder.secondaryAction);
this.setAuthoringMode(builder.authoringMode);
this.setModes(builder.modes);
}
/* Action */
public Action getAction() {
return action;
}
public void setAction(final Action action) {
if (action == null) {
this.action = new Action.Builder().build();
} else {
this.action = action;
}
}
/* Authoring UI Mode */
public AuthoringUIMode getAuthoringMode() {
return authoringMode;
}
public void setAuthoringMode(final AuthoringUIMode authoringMode) {
this.authoringMode = authoringMode;
}
/* Description */
public String getDescription() {
return description;
}
public void setDescription(final String description) {
this.description = description;
}
/* Quickly Modes */
public List<Mode> getModes() {
return this.modes;
}
public void setModes(final List<Mode> modes) {
if (this.modes == null) {
this.modes = new ArrayList<Mode>();
}
if (modes == null || CollectionUtils.isEmpty(modes)) {
this.modes.add(Mode.ANY);
} else {
this.modes = modes;
}
}
/* Path */
public String getPath() {
return path;
}
public void setPath(final String path) {
this.path = path;
}
/* Result Type */
public String getResultType() {
return StringUtils.upperCase(resultType);
}
public void setResultType(final String resultType) {
this.resultType = StringUtils.upperCase(resultType);
}
/* Secondary Action */
public Action getSecondaryAction() {
return secondaryAction;
}
public void setSecondaryAction(final Action secondaryAction) {
if (secondaryAction == null) {
this.secondaryAction = new Action.Builder().build();
} else {
this.secondaryAction = secondaryAction;
}
}
/* Title */
public String getTitle() {
return title;
}
public void setTitle(final String title) {
this.title = title;
}
/**
* Result Builder
*/
public static class Builder {
private Action action;
private AuthoringUIMode authoringMode = null;
private String description;
private List<Mode> modes = new ArrayList<Mode>();
private String path;
private String resultType;
private Action secondaryAction;
private String title;
/**
* Constructor
* @param title initialized Result w a title
*/
public Builder(String title) {
this.title = title;
}
/**
* Build method
* @return the built Result obj
*/
public Result build() {
return new Result(this);
}
public Builder action(Action action) {
this.action = action;
return this;
}
public Builder description(String description) {
this.description = description;
return this;
}
public Builder path(String path) {
this.path = path;
return this;
}
public Builder resultType(String resultType) {
this.resultType = resultType;
return this;
}
public Builder secondaryAction(Action secondaryAction) {
this.secondaryAction = secondaryAction;
return this;
}
public Builder title(String title) {
this.title = title;
return this;
}
/* Parameter-less Setters */
public Builder classic() {
this.authoringMode = AuthoringUIMode.CLASSIC;
return this;
}
public Builder touch() {
this.authoringMode = AuthoringUIMode.TOUCH;
return this;
}
public Builder dev() {
this.modes.add(Mode.DEV);
return this;
}
}
}