/* * 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.openjpa.persistence.jdbc.annotations; import java.awt.*; import org.apache.openjpa.jdbc.kernel.JDBCStore; import org.apache.openjpa.jdbc.meta.ValueMapping; import org.apache.openjpa.jdbc.meta.strats.AbstractValueHandler; import org.apache.openjpa.jdbc.schema.Column; import org.apache.openjpa.jdbc.schema.ColumnIO; import org.apache.openjpa.meta.JavaTypes; /** * Handler for {@link Point}. This is a sample of how to create custom * handlers, and is in this package for unit testing purposes. */ public class PointHandler extends AbstractValueHandler { /** * Create columns with default names and java type values. Kodo will * fill in the rest of the information and merge in any information given * in the user's mapping data. If the user does not give column names, * Kodo will alter your default names as necessary to avoid conflicts and * meet the database's name limitations. * * @param name default base name for columns */ public Column[] map(ValueMapping vm, String name, ColumnIO io, boolean adapt) { Column xcol = new Column(); xcol.setName("X" + name); xcol.setJavaType(JavaTypes.INT); Column ycol = new Column(); ycol.setName("Y" + name); ycol.setJavaType(JavaTypes.INT); return new Column[]{ xcol, ycol }; } /** * Return whether the column value is an exact value that can be used * in state-comparison versioning. */ public boolean isVersionable() { return true; } /** * Convert the object value to its datastore equivalent. */ public Object toDataStoreValue(ValueMapping vm, Object val, JDBCStore store) { if (val == null) return null; Point p = (Point) val; return new Object[]{ p.x, p.y }; } /** * Convert the datastore value to its object equivalent. */ public Object toObjectValue(ValueMapping vm, Object val) { Object[] vals = (Object[]) val; if (vals[0] == null || vals[1] == null) return null; int x = ((Number) vals[0]).intValue(); int y = ((Number) vals[1]).intValue(); return new Point(x, y); } }