001 /* 002 * Copyright 2007 Tacos. 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 * under the License. 016 */ 017 package net.sf.tacos.binding; 018 019 import net.sf.tacos.asset.AbsoluteAsset; 020 import org.apache.hivemind.Location; 021 import org.apache.hivemind.util.Defense; 022 import org.apache.tapestry.BindingException; 023 import org.apache.tapestry.IAsset; 024 import org.apache.tapestry.IComponent; 025 import org.apache.tapestry.binding.AbstractBinding; 026 import org.apache.tapestry.coerce.ValueConverter; 027 import org.apache.tapestry.services.AbsoluteURLBuilder; 028 029 /** 030 * A binding that is connected to an asset provided by a component. 031 * 032 * @author Andreas Andreou 033 * @since 4.1 034 */ 035 public class AbsoluteAssetBinding extends AbstractBinding 036 { 037 private final IComponent component; 038 private AbsoluteURLBuilder absoluteURLBuilder; 039 040 public AbsoluteAssetBinding(String description, ValueConverter valueConverter, 041 AbsoluteURLBuilder absoluteURLBuilder, Location location, IComponent component, String assetName) 042 { 043 super(assetName, valueConverter, location); 044 045 Defense.notNull(component, "component"); 046 Defense.notNull(assetName, "assetName"); 047 048 this.component = component; 049 this.absoluteURLBuilder = absoluteURLBuilder; 050 } 051 052 public Object getObject() 053 { 054 IAsset asset = component.getAsset(_description); 055 056 if (asset == null) 057 throw new BindingException("Component " + component.getExtendedId() + 058 " does not contain an asset named ''" + _description + "''.", 059 component, getLocation(), this, null); 060 061 return new AbsoluteAsset(asset, absoluteURLBuilder); 062 } 063 064 public Object getComponent() 065 { 066 return component; 067 } 068 } 069