Implement a cloneAs method for properties to make aliasing for joins easier, use it in TaskAdapter and UpdateAdapter

pull/14/head
Sam Bosley 12 years ago
parent dfc75f2816
commit e51cdb80de

@ -9,6 +9,7 @@ import static com.todoroo.andlib.sql.SqlConstants.COMMA;
import static com.todoroo.andlib.sql.SqlConstants.LEFT_PARENTHESIS;
import static com.todoroo.andlib.sql.SqlConstants.RIGHT_PARENTHESIS;
import static com.todoroo.andlib.sql.SqlConstants.SPACE;
import android.text.TextUtils;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
@ -95,6 +96,24 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
}
}
/**
* Return a clone of this property
*/
public Property<TYPE> cloneAs(String tableAlias, String columnAlias) {
Table aliasedTable = this.table;
if (!TextUtils.isEmpty(tableAlias))
aliasedTable = table.as(tableAlias);
try {
Property<TYPE> newInstance = this.getClass().getConstructor(Table.class, String.class).newInstance(aliasedTable, this.name);
if(!TextUtils.isEmpty(columnAlias))
return (Property<TYPE>) newInstance.as(columnAlias);
return newInstance;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// --- helper classes and interfaces
/**
@ -145,6 +164,11 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
public IntegerProperty as(String newAlias) {
return (IntegerProperty) super.as(newAlias);
}
@Override
public IntegerProperty cloneAs(String tableAlias, String columnAlias) {
return (IntegerProperty) this.cloneAs(tableAlias, columnAlias);
}
}
/**
@ -178,6 +202,11 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
return (StringProperty) super.as(newAlias);
}
@Override
public StringProperty cloneAs(String tableAlias, String columnAlias) {
return (StringProperty) super.cloneAs(tableAlias, columnAlias);
}
public Criterion in(final String[] value) {
final Field field = this;
return new Criterion(Operator.in) {
@ -220,6 +249,11 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
PropertyVisitor<RETURN, PARAMETER> visitor, PARAMETER data) {
return visitor.visitDouble(this, data);
}
@Override
public DoubleProperty cloneAs(String tableAlias, String columnAlias) {
return (DoubleProperty) super.cloneAs(tableAlias, columnAlias);
}
}
/**
@ -252,6 +286,11 @@ public abstract class Property<TYPE> extends Field implements Cloneable {
public LongProperty as(String newAlias) {
return (LongProperty) super.as(newAlias);
}
@Override
public LongProperty cloneAs(String tableAlias, String columnAlias) {
return (LongProperty) super.cloneAs(tableAlias, columnAlias);
}
}
public boolean checkFlag(int flag) {

@ -109,15 +109,15 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
public static final String BROADCAST_EXTRA_TASK = "model"; //$NON-NLS-1$
@SuppressWarnings("nls")
private static final LongProperty TASK_RABBIT_ID = new LongProperty(Metadata.TABLE.as(TaskListFragment.TR_METADATA_JOIN), Metadata.ID.name).as("taskRabId");
private static final LongProperty TASK_RABBIT_ID = Metadata.ID.cloneAs(TaskListFragment.TR_METADATA_JOIN, "taskRabId");
@SuppressWarnings("nls")
private static final StringProperty TAGS = new StringProperty(null, "group_concat(" + TaskListFragment.TAGS_METADATA_JOIN + "." + TaskToTagMetadata.TAG_NAME.name + ", ' | ')").as("tags");
@SuppressWarnings("nls")
private static final LongProperty FILE_ID_PROPERTY = new LongProperty(Metadata.TABLE.as(TaskListFragment.FILE_METADATA_JOIN), Metadata.ID.name).as("fileId");
private static final LongProperty FILE_ID_PROPERTY = Metadata.ID.cloneAs(TaskListFragment.FILE_METADATA_JOIN, "fileId");
@SuppressWarnings("nls")
private static final IntegerProperty HAS_NOTES_PROPERTY = new IntegerProperty(null, "length(" + Task.NOTES + ") > 0").as("hasNotes");
private static final StringProperty PICTURE = new StringProperty(User.TABLE.as(TaskListFragment.USER_IMAGE_JOIN), User.PICTURE.name);
private static final StringProperty PICTURE = User.PICTURE.cloneAs(TaskListFragment.USER_IMAGE_JOIN, null);
// --- other constants
@ -219,7 +219,6 @@ public class TaskAdapter extends CursorAdapter implements Filterable {
protected final int resource;
protected final LayoutInflater inflater;
private DetailLoaderThread detailLoader;
// private ActionsLoaderThread actionsLoader;
private int fontSize;
protected int applyListeners = APPLY_LISTENERS_PARENT;
private long mostRecentlyMade = -1;

@ -66,10 +66,10 @@ public class UpdateAdapter extends CursorAdapter {
public static final String USER_TABLE_ALIAS = "users_join"; //$NON-NLS-1$
public static final StringProperty USER_PICTURE = new StringProperty(User.TABLE.as(USER_TABLE_ALIAS), User.PICTURE.name).as("userPicture"); //$NON-NLS-1$
private static final StringProperty USER_FIRST_NAME = new StringProperty(User.TABLE.as(USER_TABLE_ALIAS), User.FIRST_NAME.name).as("userFirstName"); //$NON-NLS-1$
private static final StringProperty USER_LAST_NAME = new StringProperty(User.TABLE.as(USER_TABLE_ALIAS), User.LAST_NAME.name).as("userLastName"); //$NON-NLS-1$
private static final StringProperty USER_NAME = new StringProperty(User.TABLE.as(USER_TABLE_ALIAS), User.NAME.name).as("userName"); //$NON-NLS-1$
public static final StringProperty USER_PICTURE = User.PICTURE.cloneAs(USER_TABLE_ALIAS, "userPicture"); //$NON-NLS-1$
private static final StringProperty USER_FIRST_NAME = User.FIRST_NAME.cloneAs(USER_TABLE_ALIAS, "userFirstName"); //$NON-NLS-1$
private static final StringProperty USER_LAST_NAME = User.LAST_NAME.cloneAs(USER_TABLE_ALIAS, "userLastName"); //$NON-NLS-1$
private static final StringProperty USER_NAME = User.NAME.cloneAs(USER_TABLE_ALIAS, "userName"); //$NON-NLS-1$
public static final Property<?>[] USER_PROPERTIES = {
USER_PICTURE,

Loading…
Cancel
Save