/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.isis.viewer.wicket.model.mementos;
import java.util.List;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
import org.apache.isis.core.commons.lang.StringExtensions;
import org.apache.isis.core.metamodel.adapter.oid.Oid;
public enum PageParameterNames {
/**
* The object's {@link Oid}.
*
* <p>
* Also encodes the object's spec, and whether the object is persistent or not.
*/
OBJECT_OID,
/**
* Hints for the rendering of an entity.
*/
ANCHOR,
/**
* Owning type of an action.
*
* <p>
* Whereas {@link #OBJECT_SPEC} is the concrete runtime type of the adapter,
* the owning type could be some superclass if the action has been
* inherited.
*/
ACTION_OWNING_SPEC,
/**
* Whether user, exploration, prototype etc.
*/
ACTION_TYPE,
/**
* The name of the action, along with its parameters.
*/
ACTION_ID,
/**
* When a single object is returned, whether to redirect to it or simply inline it.
*/
ACTION_SINGLE_RESULTS_MODE,
/**
* The argument acting as a context for a contributed action, if any.
*
* <p>
* In the format N=OBJECT_OID, where N is the 0-based action parameter
* index.
*/
ACTION_PARAM_CONTEXT,
/**
* Action argument(s), if known.
*/
ACTION_ARGS;
/**
* Returns the {@link #name()} formatted as
* {@link StringExtensions#asCamel(String) camel case}.
*
* <p>
* For example, <tt>ACTION_TYPE</tt> becomes <tt>actionType</tt>.
*/
@Override
public String toString() {
return StringExtensions.toCamelCase(name());
}
public String getStringFrom(final PageParameters pageParameters) {
return getStringFrom(pageParameters, null);
}
public String getStringFrom(PageParameters pageParameters, String defaultValue) {
if(pageParameters == null) {
return defaultValue;
}
return pageParameters.get(this.toString()).toString(defaultValue);
}
public <T extends Enum<T>> T getEnumFrom(PageParameters pageParameters, Class<T> enumClass) {
String value = getStringFrom(pageParameters);
return value != null? Enum.valueOf(enumClass, value): null;
}
public List<String> getListFrom(PageParameters pageParameters) {
return Lists.transform(pageParameters.getValues(this.toString()), new Function<StringValue, String>() {
@Override
public String apply(StringValue input) {
return input.toString();
}
});
}
public void addStringTo(final PageParameters pageParameters, final String value) {
pageParameters.add(this.toString(), value);
}
public void addEnumTo(final PageParameters pageParameters, final Enum<?> someEnum) {
addStringTo(pageParameters, someEnum.name());
}
/**
* @param pageParameters
*/
public void removeFrom(PageParameters pageParameters) {
pageParameters.remove(this.toString());
}
}