/* * 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.util; import org.apache.isis.applib.services.bookmark.Bookmark; import org.apache.isis.applib.services.hint.HintStore; import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.session.IsisSessionFactory; import org.apache.isis.viewer.wicket.model.hints.UiHintContainer; import org.apache.wicket.Component; import org.apache.wicket.request.mapper.parameter.PageParameters; import javax.inject.Provider; import java.io.Serializable; /** * Scoped by the {@link Component component's path}. */ public class ComponentHintKey implements Serializable { private static final long serialVersionUID = 1L; public static ComponentHintKey create(final Provider<Component> pathProvider, final String key) { return new ComponentHintKey(pathProvider, null, key, null); } public static ComponentHintKey create(final Component path, final String key) { return new ComponentHintKey(null, path, key, null); } public static ComponentHintKey create( final String fullKey) { return new ComponentHintKey(null, null, null, fullKey); } private Provider<Component> componentProvider; private Component component; private final String keyName; private final String fullKey; private ComponentHintKey( final Provider<Component> componentProvider, final Component component, final String keyName, final String fullKey) { this.componentProvider = componentProvider; this.component = component; this.keyName = keyName; this.fullKey = fullKey; } public String getKey() { return fullKey != null ? fullKey : keyFor(component != null? component : componentProvider.get(), keyName); } protected String keyFor(final Component component, final String keyName) { return UiHintContainer.Util.hintPathFor(component) + "-" + keyName; } public boolean matches(final Component component, final String keyName) { final String key = getKey(); final String keyOfProvided = keyFor(component, keyName); return keyOfProvided.equals(key); } public void set(final Bookmark bookmark, String value) { if(bookmark == null) { return; } if(value != null) { getHintStore().set(bookmark, getKey(), value); } else { remove(bookmark); } } public String get(final Bookmark bookmark) { if(bookmark == null) { return null; } return getHintStore().get(bookmark, getKey()); } public void remove(final Bookmark bookmark) { if(bookmark == null) { return; } final String key = getKey(); getHintStore().remove(bookmark, key); } public void hintTo( final Bookmark bookmark, final PageParameters pageParameters, final String prefix) { Serializable value = get(bookmark); if(value == null) { return; } final String prefixedKey = prefix + getKey(); pageParameters.add(prefixedKey, value); } public static ComponentHintKey noop() { return new ComponentHintKey(null, null, null, null) { @Override public String getKey() { return null; } @Override public void set(final Bookmark bookmark, final String value) { } @Override public String get(final Bookmark bookmark) { return null; } @Override public void remove(final Bookmark bookmark) { } }; } HintStore getHintStore() { return getIsisSessionFactory().getServicesInjector().lookupService(HintStore.class); } IsisSessionFactory getIsisSessionFactory() { return IsisContext.getSessionFactory(); } }