Search in sources :

Example 1 with PropertySetException

use of jp.ossc.nimbus.beans.dataset.PropertySetException in project nimbus by nimbus-org.

the class SharedContextRecord method updateProperty.

/**
 * 指定された名前のプロパティに、指定された値を更新した場合の差分情報を取得する。<p>
 *
 * @param name プロパティ名
 * @param val プロパティの値
 * @param diff 差分
 * @return 差分
 * @exception PropertySetException プロパティの設定に失敗した場合
 * @exception SharedContextUpdateException 差分情報の取得に失敗した場合
 */
public SharedContextValueDifference updateProperty(String name, Object val, SharedContextValueDifference diff) throws PropertySetException, SharedContextUpdateException {
    RecordSchema recordSchema = getRecordSchema();
    if (recordSchema == null) {
        throw new PropertySetException(null, "Schema is not initialized.");
    }
    final PropertySchema propertySchema = recordSchema.getPropertySchema(name);
    if (propertySchema == null) {
        throw new PropertySetException(null, "No such property : " + name);
    }
    return updateProperty(recordSchema.getPropertyIndex(name), val, diff);
}
Also used : PropertySetException(jp.ossc.nimbus.beans.dataset.PropertySetException) PropertySchema(jp.ossc.nimbus.beans.dataset.PropertySchema) RecordSchema(jp.ossc.nimbus.beans.dataset.RecordSchema)

Example 2 with PropertySetException

use of jp.ossc.nimbus.beans.dataset.PropertySetException in project nimbus by nimbus-org.

the class DataSetServletRequestParameterConverter method convert.

/**
 * 指定されたオブジェクトを変換する。<p>
 *
 * @param obj 変換対象のオブジェクト
 * @return 変換後のオブジェクト
 * @exception ConvertException 変換に失敗した場合
 */
public Object convert(Object obj) throws ConvertException {
    if (!(obj instanceof ServletRequest)) {
        return null;
    }
    ServletRequest request = (ServletRequest) obj;
    final Map paramMap = request.getParameterMap();
    if (paramMap == null || paramMap.size() == 0) {
        return null;
    }
    String defaultDsName = request.getParameter(dataSetParameterName);
    if ((defaultDsName == null || defaultDsName.length() == 0) && request instanceof HttpServletRequest) {
        HttpServletRequest httpReq = (HttpServletRequest) request;
        String path = httpReq.getServletPath();
        if (httpReq.getPathInfo() != null) {
            path = path + httpReq.getPathInfo();
        }
        if (path != null) {
            int index = path.lastIndexOf('.');
            if (index != -1) {
                path = path.substring(0, index);
            }
            defaultDsName = dataSetPathPrefix + path;
        }
    }
    final Map currentDsMap = new HashMap();
    final Iterator entries = paramMap.entrySet().iterator();
    while (entries.hasNext()) {
        final Map.Entry entry = (Map.Entry) entries.next();
        final String key = (String) entry.getKey();
        final int index = key.indexOf(datasetDelimiter);
        if (index == -1 || index == key.length() - 1) {
            continue;
        }
        String dsName = null;
        if (index == 0) {
            dsName = defaultDsName;
        } else {
            dsName = key.substring(0, index);
        }
        if (dsName == null) {
            continue;
        }
        DataSet ds = (DataSet) currentDsMap.get(dsName);
        if (ds == null) {
            if (dataSetMap.containsKey(dsName)) {
                ds = ((DataSet) dataSetMap.get(dsName)).cloneSchema();
            } else if (beanFlowInvokerFactory != null && beanFlowInvokerFactory.containsFlow(dsName)) {
                final BeanFlowInvoker beanFlowInvoker = beanFlowInvokerFactory.createFlow(dsName);
                Object ret = null;
                try {
                    ret = beanFlowInvoker.invokeFlow(null);
                } catch (Exception e) {
                    throw new ConvertException("Exception occured in BeanFlow '" + dsName + "'", e);
                }
                if (!(ret instanceof DataSet)) {
                    throw new ConvertException("Result of BeanFlow '" + dsName + "' is not DataSet.");
                }
                ds = (DataSet) ret;
            } else {
                if (isIgnoreUnknownParameter) {
                    continue;
                } else {
                    throw new ConvertException("Unknown DataSet : " + dsName);
                }
            }
            currentDsMap.put(dsName, ds);
        }
        final String propStr = key.substring(index + 1);
        Property prop = (Property) propertyCache.get(propStr);
        if (prop == null) {
            try {
                prop = PropertyFactory.createProperty(propStr);
                if (isIgnoreUnknownParameter) {
                    prop.setIgnoreNullProperty(true);
                }
            } catch (IllegalArgumentException e) {
                throw new ConvertException("Parameter '" + key + "' is illegal.", e);
            }
            Property old = (Property) propertyCache.putIfAbsent(propStr, prop);
            if (old != null) {
                prop = old;
            }
        }
        final String[] vals = (String[]) entry.getValue();
        try {
            if (prop instanceof NestedProperty) {
                Property thisProp = ((NestedProperty) prop).getThisProperty();
                if (thisProp instanceof NestedProperty) {
                    Property nestedProp = ((NestedProperty) prop).getNestedProperty();
                    Property nestedProp2 = ((NestedProperty) thisProp).getNestedProperty();
                    if (nestedProp2 instanceof IndexedProperty) {
                        Property thisProp2 = ((NestedProperty) thisProp).getThisProperty();
                        Object thisObj = thisProp2.getProperty(ds);
                        if (thisObj == null) {
                            if (isIgnoreUnknownParameter) {
                                continue;
                            } else {
                                throw new ConvertException("Parameter '" + key + "' is illegal.");
                            }
                        }
                        if (thisObj instanceof RecordList) {
                            setRecordListProperty((RecordList) thisObj, nestedProp.getPropertyName(), ((IndexedProperty) nestedProp2).getIndex(), vals);
                        } else {
                            // ありえない
                            prop.setProperty(ds, vals[vals.length - 1]);
                        }
                    } else {
                        Object thisObj = thisProp.getProperty(ds);
                        if (thisObj == null) {
                            if (isIgnoreUnknownParameter) {
                                continue;
                            } else {
                                throw new ConvertException("Parameter '" + key + "' is illegal.");
                            }
                        }
                        if (thisObj instanceof RecordList) {
                            setRecordListProperty((RecordList) thisObj, nestedProp.getPropertyName(), vals);
                        } else if (thisObj instanceof Record) {
                            setRecordProperty((Record) thisObj, nestedProp.getPropertyName(), nestedProp.getPropertyType(thisObj), vals);
                        } else {
                            nestedProp.setProperty(thisObj, vals[vals.length - 1]);
                        }
                    }
                } else {
                    Object thisObj = thisProp.getProperty(ds);
                    if (thisObj == null) {
                        if (isIgnoreUnknownParameter) {
                            continue;
                        } else {
                            throw new ConvertException("Parameter '" + key + "' is illegal.");
                        }
                    }
                    Property nestedProp = ((NestedProperty) prop).getNestedProperty();
                    if (thisObj instanceof RecordList) {
                        setRecordListProperty((RecordList) thisObj, nestedProp.getPropertyName(), vals);
                    } else if (thisObj instanceof Record) {
                        setRecordProperty((Record) thisObj, nestedProp.getPropertyName(), nestedProp.getPropertyType(thisObj), vals);
                    } else {
                        nestedProp.setProperty(thisObj, vals[vals.length - 1]);
                    }
                }
            } else {
                throw new ConvertException("Parameter '" + key + "' is illegal.");
            }
        } catch (PropertySetException e) {
            Throwable cause = e.getCause();
            if (cause instanceof ConvertException) {
                throw (ConvertException) cause;
            }
            if (isIgnoreUnknownParameter) {
                continue;
            } else {
                throw new ConvertException("Parameter '" + key + "' is illegal.", e);
            }
        } catch (NoSuchPropertyException e) {
            if (isIgnoreUnknownParameter) {
                continue;
            } else {
                throw new ConvertException("Parameter '" + key + "' is illegal.", e);
            }
        } catch (InvocationTargetException e) {
            throw new ConvertException("Parameter '" + key + "' is illegal.", e.getTargetException());
        }
    }
    if (currentDsMap.size() == 0) {
        return null;
    } else if (currentDsMap.size() == 1) {
        return currentDsMap.values().iterator().next();
    } else {
        return currentDsMap;
    }
}
Also used : ServletRequest(javax.servlet.ServletRequest) HttpServletRequest(javax.servlet.http.HttpServletRequest) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) DataSet(jp.ossc.nimbus.beans.dataset.DataSet) BeanFlowInvoker(jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvoker) HttpServletRequest(javax.servlet.http.HttpServletRequest) Iterator(java.util.Iterator) Record(jp.ossc.nimbus.beans.dataset.Record) NestedProperty(jp.ossc.nimbus.beans.NestedProperty) Property(jp.ossc.nimbus.beans.Property) IndexedProperty(jp.ossc.nimbus.beans.IndexedProperty) NestedProperty(jp.ossc.nimbus.beans.NestedProperty) PropertySetException(jp.ossc.nimbus.beans.dataset.PropertySetException) InvocationTargetException(java.lang.reflect.InvocationTargetException) NoSuchPropertyException(jp.ossc.nimbus.beans.NoSuchPropertyException) InvocationTargetException(java.lang.reflect.InvocationTargetException) PropertySetException(jp.ossc.nimbus.beans.dataset.PropertySetException) RecordList(jp.ossc.nimbus.beans.dataset.RecordList) IndexedProperty(jp.ossc.nimbus.beans.IndexedProperty) NoSuchPropertyException(jp.ossc.nimbus.beans.NoSuchPropertyException) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) ConcurrentMap(java.util.concurrent.ConcurrentMap) Map(java.util.Map)

Example 3 with PropertySetException

use of jp.ossc.nimbus.beans.dataset.PropertySetException in project nimbus by nimbus-org.

the class SharedContextRecord method updateParseProperty.

/**
 * 指定されたインデックスのプロパティに、指定された値をパースして更新した場合の差分情報を取得する。<p>
 *
 * @param index プロパティのインデックス
 * @param val プロパティの値
 * @param diff 差分
 * @return 差分
 * @exception PropertySetException プロパティの設定に失敗した場合
 * @exception SharedContextUpdateException 差分情報の取得に失敗した場合
 */
public SharedContextValueDifference updateParseProperty(int index, Object val, SharedContextValueDifference diff) throws PropertySetException, SharedContextUpdateException {
    RecordSchema recordSchema = getRecordSchema();
    if (recordSchema == null) {
        throw new PropertySetException(null, "Schema is not initialized.");
    }
    final PropertySchema propertySchema = recordSchema.getPropertySchema(index);
    if (propertySchema == null) {
        throw new PropertySetException(null, "No such property : " + index);
    }
    return updateProperty(index, propertySchema.parse(val), diff);
}
Also used : PropertySetException(jp.ossc.nimbus.beans.dataset.PropertySetException) PropertySchema(jp.ossc.nimbus.beans.dataset.PropertySchema) RecordSchema(jp.ossc.nimbus.beans.dataset.RecordSchema)

Example 4 with PropertySetException

use of jp.ossc.nimbus.beans.dataset.PropertySetException in project nimbus by nimbus-org.

the class SharedContextRecord method updateParseProperty.

/**
 * 指定された名前のプロパティに、指定された値をパースして更新した場合の差分情報を取得する。<p>
 *
 * @param name プロパティ名
 * @param val プロパティの値
 * @param diff 差分
 * @return 差分
 * @exception PropertySetException プロパティの設定に失敗した場合
 * @exception SharedContextUpdateException 差分情報の取得に失敗した場合
 */
public SharedContextValueDifference updateParseProperty(String name, Object val, SharedContextValueDifference diff) throws PropertySetException, SharedContextUpdateException {
    RecordSchema recordSchema = getRecordSchema();
    if (recordSchema == null) {
        throw new PropertySetException(null, "Schema is not initialized.");
    }
    final PropertySchema propertySchema = recordSchema.getPropertySchema(name);
    if (propertySchema == null) {
        throw new PropertySetException(null, "No such property : " + name);
    }
    return updateProperty(recordSchema.getPropertyIndex(name), propertySchema.parse(val), diff);
}
Also used : PropertySetException(jp.ossc.nimbus.beans.dataset.PropertySetException) PropertySchema(jp.ossc.nimbus.beans.dataset.PropertySchema) RecordSchema(jp.ossc.nimbus.beans.dataset.RecordSchema)

Aggregations

PropertySetException (jp.ossc.nimbus.beans.dataset.PropertySetException)4 PropertySchema (jp.ossc.nimbus.beans.dataset.PropertySchema)3 RecordSchema (jp.ossc.nimbus.beans.dataset.RecordSchema)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 ConcurrentMap (java.util.concurrent.ConcurrentMap)1 ServletRequest (javax.servlet.ServletRequest)1 HttpServletRequest (javax.servlet.http.HttpServletRequest)1 IndexedProperty (jp.ossc.nimbus.beans.IndexedProperty)1 NestedProperty (jp.ossc.nimbus.beans.NestedProperty)1 NoSuchPropertyException (jp.ossc.nimbus.beans.NoSuchPropertyException)1 Property (jp.ossc.nimbus.beans.Property)1 DataSet (jp.ossc.nimbus.beans.dataset.DataSet)1 Record (jp.ossc.nimbus.beans.dataset.Record)1 RecordList (jp.ossc.nimbus.beans.dataset.RecordList)1 BeanFlowInvoker (jp.ossc.nimbus.service.beancontrol.interfaces.BeanFlowInvoker)1