001/*
002 * (C) Copyright 2006-2007 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     Jean-Marc Orliaguet, Chalmers
018 *
019 * $Id$
020 */
021
022package org.nuxeo.theme.jsf.taglib;
023
024import javax.faces.component.UIComponent;
025import javax.faces.webapp.UIComponentELTag;
026
027public abstract class BaseMVCTag extends UIComponentELTag {
028
029    private String resource;
030
031    private String url;
032
033    @Override
034    public abstract String getComponentType();
035
036    @Override
037    public String getRendererType() {
038        // null means the component renders itself
039        return null;
040    }
041
042    @Override
043    protected void setProperties(UIComponent component) {
044        super.setProperties(component);
045
046        if (null != url && null != resource) {
047            throw new IllegalArgumentException("Cannot specify both a URL and a resource.");
048        }
049
050        if (null != resource) {
051            component.getAttributes().put("resource", resource);
052        }
053
054        if (null != url) {
055            if (!url.startsWith("/")) {
056                throw new IllegalArgumentException("The URL must begin with /");
057            }
058            component.getAttributes().put("url", url);
059        }
060
061    }
062
063    @Override
064    public void release() {
065        super.release();
066        resource = null;
067        url = null;
068    }
069
070    /* property accessors */
071    public String getUrl() {
072        return url;
073    }
074
075    public void setUrl(String url) {
076        this.url = url;
077    }
078
079    public String getResource() {
080        return resource;
081    }
082
083    public void setResource(String resource) {
084        this.resource = resource;
085    }
086
087}