blob: e5c11474ca0dadfcbd697d6f0076c7c659bd0176 [file] [log] [blame]
/*
* 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.empire.jsf2.pages;
import java.io.Serializable;
import java.sql.Connection;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.apache.empire.commons.StringUtils;
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBRowSet;
import org.apache.empire.exceptions.InvalidArgumentException;
public class PageElement implements Serializable
{
private static final long serialVersionUID = 1L;
private final Page page;
private final String propertyName;
protected PageElement(Page page, String propertyName)
{
if (page==null)
throw new InvalidArgumentException("page", page);
if (StringUtils.isEmpty(propertyName))
throw new InvalidArgumentException("propertyName", propertyName);
// set params
this.page = page;
this.propertyName = propertyName;
// register with page
page.registerPageElement(this);
}
public String getPropertyName()
{
return propertyName;
}
public Page getPage()
{
return page;
}
protected void onInitPage()
{
// Chance to init the page
}
protected void onRefreshPage()
{
// Chance to init the page
}
/**
* Session Object handling
*
* @param type
* @return
*/
@SuppressWarnings("unchecked")
protected <T> T getSessionObject(Class<T> type)
{
String beanName = page.getPageName() + "." + propertyName + "." + type.getSimpleName();
Map<String, Object> map = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
return (T) map.get(beanName);
}
protected <T> void setSessionObject(Class<T> type, T object)
{
String beanName = page.getPageName() + "." + propertyName + "." + type.getSimpleName();
Map<String, Object> map = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
if (object != null)
map.put(beanName, object);
else
map.remove(beanName);
}
protected <T> void removeSessionObject(Class<T> type)
{
setSessionObject(type, null);
}
public Connection getConnection(DBDatabase db)
{
return page.getConnection(db);
}
public Connection getConnection(DBObject dbo)
{
if (dbo==null)
throw new InvalidArgumentException("dbo", dbo);
return page.getConnection(dbo.getDatabase());
}
/**
* generates a default property name for the bean list
* @param rowset
* @return a propertyName
*/
protected static String getDefaultPropertyName(DBRowSet rowset)
{
String name = rowset.getName();
if (name==null)
return "unknown"; // no name provided!
// compute name
name = name.toLowerCase();
String res = "";
int beg=0;
while (beg<name.length())
{
int end = name.indexOf('_', beg);
if (end<0)
end = name.length();
// assemble
if (end>beg)
{
if (beg==0)
{ // begin with all lower cases
res = name.substring(beg, end);
}
else
{ // add word where first letter is upper case
res += name.substring(beg, beg+1).toUpperCase();
if (end-beg>1)
{
res += name.substring(beg+1, end);
}
}
}
// next
beg = end + 1;
}
// Result
return res;
}
/**
* Javascript Call
*
* @param function
protected void addJavascriptCall(String function)
{
page.addJavascriptCall(function);
}
*/
}