All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wicketstuff.mergedresources.annotations.ContributionInjector Maven / Gradle / Ivy

Go to download

Resource merging for Apache Wicket (http://wicket.apache.org), see http://talk-on-tech.blogspot.com/2008/08/wicket-interface-speed-up-merging.html

There is a newer version: 4.0.1
Show newest version
/**
 * Copyright 2010 Molindo GmbH
 *
 * 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.
 */

package org.wicketstuff.mergedresources.annotations;

import java.util.HashMap;

import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.application.IComponentInstantiationListener;

public class ContributionInjector implements IComponentInstantiationListener {

	private HashMap, HeaderContribution> _contributions = new HashMap, HeaderContribution>();

	public void onInstantiation(Component component) {
		if (eligible(component)) {
			asMarkupContainer(component).add(getHeaderContribution(component.getClass()));
		}
	}

	private HeaderContribution getHeaderContribution(Class cls) {
		HeaderContribution hc = _contributions.get(cls);
		if (hc == null) {
			synchronized (_contributions) {
				hc = new HeaderContribution(cls);
				_contributions.put(cls, hc);
			}
		}
		return hc;
	}

	private MarkupContainer asMarkupContainer(Component component) {
		return (MarkupContainer) component;
	}

	private boolean hasResourceAnnotation(Component component) {
		return component.getClass().getAnnotation(JsContribution.class) != null
				|| component.getClass().getAnnotation(CssContribution.class) != null;
	}

	private boolean eligible(Component component) {
		return MarkupContainer.class.isAssignableFrom(component.getClass()) && hasResourceAnnotation(component);
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy