blob: df43a8be62e7cdf43b400390ef19a5d461cf0f4b [file] [log] [blame]
// Copyright 2004, 2005 The Apache Software Foundation
//
// 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.apache.tapestry.vlib.components;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.tapestry.BaseComponent;
import org.apache.tapestry.IAsset;
import org.apache.tapestry.IPage;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.Tapestry;
import org.apache.tapestry.annotations.InjectObject;
import org.apache.tapestry.annotations.InjectPage;
import org.apache.tapestry.annotations.InjectState;
import org.apache.tapestry.annotations.InjectStateFlag;
import org.apache.tapestry.annotations.Message;
import org.apache.tapestry.annotations.Parameter;
import org.apache.tapestry.callback.ICallback;
import org.apache.tapestry.callback.PageCallback;
import org.apache.tapestry.vlib.Global;
import org.apache.tapestry.vlib.IActivate;
import org.apache.tapestry.vlib.Visit;
import org.apache.tapestry.vlib.pages.Home;
import org.apache.tapestry.vlib.pages.Login;
import org.apache.tapestry.vlib.services.ApplicationLifecycle;
/**
* The standard Border component, which provides the title of the page, the link to
* {@link org.apache.tapestry.vlib.pages.MyLibrary}, the
* {@link org.apache.tapestry.vlib.pages.Login} page and the Logout page.
*
* @author Howard Lewis Ship
*/
public abstract class Border extends BaseComponent
{
public static final String WINDOW_TITLE = "Tapestry Virtual Library";
// Determined by finishLoad(), static threafter.
private String _pageType;
private IAsset _titleImage;
private IAsset _searchImage;
private IAsset _searchRolloverImage;
private IAsset _myLibraryImage;
private IAsset _myLibraryRolloverImage;
private IAsset _borrowedBooksImage;
private IAsset _borrowedBooksRolloverImage;
private IAsset _loginImage;
private IAsset _loginRolloverImage;
private IAsset _newBookImage;
private IAsset _newBookRolloverImage;
private IAsset _editProfileImage;
private IAsset _editProfileRolloverImage;
private IAsset _giveAwayImage;
private IAsset _giveAwayRolloverImage;
private IAsset _editUsersImage;
private IAsset _editUsersRolloverImage;
private IAsset _editPublishersImage;
private IAsset _editPublishersRolloverImage;
private IAsset _transferBooksImage;
private IAsset _transferBooksRolloverImage;
@Parameter
public abstract String getSubtitle();
@Parameter
public abstract Browser getBrowser();
@InjectState("visit")
public abstract Visit getVisit();
@InjectStateFlag("visit")
public abstract boolean getVisitExists();
@InjectPage("Login")
public abstract Login getLogin();
@InjectPage("Home")
public abstract Home getHome();
@InjectState("global")
public abstract Global getGlobal();
@InjectObject("service:vlib.ApplicationLifecycle")
public abstract ApplicationLifecycle getApplicationLifecycle();
@Message
public abstract String goodbye();
public void finishLoad()
{
IPage page = getPage();
String pageName = page.getPageName();
_pageType = page.getSpecification().getProperty("page-type");
if (_pageType == null)
_pageType = pageName;
_titleImage = getAsset("title_" + pageName);
if (_titleImage == null)
_titleImage = getAsset("title_" + _pageType);
if (_titleImage == null)
throw new ApplicationRuntimeException("Cannot find title image for " + pageName
+ " or " + _pageType + ".", this, null, null);
// Based on the type, select the images to use on this instance of Border
// in this particular page.
_searchImage = selectImage("Search", "search");
_searchRolloverImage = selectImage("Search", "search_h");
_myLibraryImage = selectImage("MyLibrary", "mylibrary");
_myLibraryRolloverImage = selectImage("MyLibrary", "mylibrary_h");
_borrowedBooksImage = selectImage("BorrowedBooks", "borrowedbooks");
_borrowedBooksRolloverImage = selectImage("BorrowedBooks", "borrowedbooks_h");
_newBookImage = selectImage("NewBook", "newbook");
_newBookRolloverImage = selectImage("NewBook", "newbook_h");
_editProfileImage = selectImage("EditProfile", "editprofile");
_editProfileRolloverImage = selectImage("EditProfile", "editprofile_h");
_giveAwayImage = selectImage("GiveAwayBooks", "giveaway");
_giveAwayRolloverImage = selectImage("GiveAwayBooks", "giveaway_h");
_editUsersImage = selectImage("EditUsers", "editusers");
_editUsersRolloverImage = selectImage("EditUsers", "editusers_h");
_editPublishersImage = selectImage("EditPublishers", "editpublishers");
_editPublishersRolloverImage = selectImage("EditPublishers", "editpublishers_h");
_transferBooksImage = selectImage("TransferBooks", "transferbooks");
_transferBooksRolloverImage = selectImage("TransferBooks", "transferbooks_h");
_loginImage = selectImage("Login", "login");
_loginRolloverImage = selectImage("Login", "login_h");
}
private IAsset selectImage(String type, String baseName)
{
String key = _pageType.equals(type) ? baseName + "_s" : baseName;
return getAsset(key);
}
public String getWindowTitle()
{
String subtitle = getSubtitle();
if (subtitle == null)
return WINDOW_TITLE;
return WINDOW_TITLE + ": " + subtitle;
}
public boolean isLoggedIn()
{
return getVisitExists() && getVisit().isUserLoggedIn();
}
public boolean isAdmin()
{
return isLoggedIn() && getVisit().getUser().isAdmin();
}
public void editProfile()
{
activate("EditProfile");
}
public void viewBorrowedBooks()
{
activate("BorrowedBooks");
}
public void viewMyLibrary()
{
activate("MyLibrary");
}
private void activate(String pageName)
{
IRequestCycle cycle = getPage().getRequestCycle();
IActivate page = (IActivate) cycle.getPage(pageName);
page.validate(cycle);
page.activate();
}
public IPage login()
{
if (isLoggedIn())
return null;
ICallback callback = new PageCallback(getPage().getPageName());
Login login = getLogin();
login.setCallback(callback);
return login;
}
public IPage logout()
{
getApplicationLifecycle().logout();
Home home = getHome();
home.setMessage(goodbye());
return home;
}
public void selectBrowserPage(int page)
{
Browser browser = getBrowser();
if (browser == null)
throw Tapestry.createRequiredParameterException(this, "browser");
browser.jump(page);
}
public IAsset getBorrowedBooksImage()
{
return _borrowedBooksImage;
}
public IAsset getBorrowedBooksRolloverImage()
{
return _borrowedBooksRolloverImage;
}
public IAsset getTitleImage()
{
return _titleImage;
}
public IAsset getSearchImage()
{
return _searchImage;
}
public IAsset getSearchRolloverImage()
{
return _searchRolloverImage;
}
public IAsset getMyLibraryImage()
{
return _myLibraryImage;
}
public IAsset getMyLibraryRolloverImage()
{
return _myLibraryRolloverImage;
}
public IAsset getLoginImage()
{
return _loginImage;
}
public IAsset getLoginRolloverImage()
{
return _loginRolloverImage;
}
public String getPageType()
{
return _pageType;
}
public IAsset getNewBookImage()
{
return _newBookImage;
}
public IAsset getNewBookRolloverImage()
{
return _newBookRolloverImage;
}
public IAsset getEditProfileImage()
{
return _editProfileImage;
}
public IAsset getEditProfileRolloverImage()
{
return _editProfileRolloverImage;
}
public IAsset getGiveAwayImage()
{
return _giveAwayImage;
}
public IAsset getGiveAwayRolloverImage()
{
return _giveAwayRolloverImage;
}
public IAsset getEditPublishersImage()
{
return _editPublishersImage;
}
public IAsset getEditPublishersRolloverImage()
{
return _editPublishersRolloverImage;
}
public IAsset getEditUsersImage()
{
return _editUsersImage;
}
public IAsset getEditUsersRolloverImage()
{
return _editUsersRolloverImage;
}
public IAsset getTransferBooksImage()
{
return _transferBooksImage;
}
public IAsset getTransferBooksRolloverImage()
{
return _transferBooksRolloverImage;
}
}