de.greenrobot.daogenerator.ToOne Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of DaoGenerator Show documentation
Show all versions of DaoGenerator Show documentation
Code generator for greenDAO, the light and fast ORM for Android
The newest version!
/*
* Copyright (C) 2011 Markus Junginger, greenrobot (http://greenrobot.de)
*
* This file is part of greenDAO Generator.
*
* greenDAO Generator is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* greenDAO Generator is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with greenDAO Generator. If not, see .
*/
package de.greenrobot.daogenerator;
/** To-one relationship from a source entity to one (or zero) target entity. */
public class ToOne {
private final Schema schema;
private final Entity sourceEntity;
private final Entity targetEntity;
private final Property[] fkProperties;
private final String[] resolvedKeyJavaType;
private final boolean[] resolvedKeyUseEquals;
private String name;
private final boolean useFkProperty;
public ToOne(Schema schema, Entity sourceEntity, Entity targetEntity, Property[] fkProperties, boolean useFkProperty) {
this.schema = schema;
this.sourceEntity = sourceEntity;
this.targetEntity = targetEntity;
this.fkProperties = fkProperties;
this.useFkProperty = useFkProperty;
resolvedKeyJavaType = new String[fkProperties.length];
resolvedKeyUseEquals = new boolean[fkProperties.length];
}
public Entity getSourceEntity() {
return sourceEntity;
}
public Entity getTargetEntity() {
return targetEntity;
}
public Property[] getFkProperties() {
return fkProperties;
}
public String[] getResolvedKeyJavaType() {
return resolvedKeyJavaType;
}
public boolean[] getResolvedKeyUseEquals() {
return resolvedKeyUseEquals;
}
public String getName() {
return name;
}
/**
* Sets the name of the relation, which is used as the property name in the entity (the source entity owning the
* to-many relationship).
*/
public void setName(String name) {
this.name = name;
}
public boolean isUseFkProperty() {
return useFkProperty;
}
void init2ndPass() {
if (name == null) {
char[] nameCharArray = targetEntity.getClassName().toCharArray();
nameCharArray[0] = Character.toLowerCase(nameCharArray[0]);
name = new String(nameCharArray);
}
}
/** Constructs fkColumns. Depends on 2nd pass of target key properties. */
void init3ndPass() {
Property targetPkProperty = targetEntity.getPkProperty();
if (fkProperties.length != 1 || targetPkProperty == null) {
throw new RuntimeException("Currently only single FK columns are supported: " + this);
}
Property property = fkProperties[0];
PropertyType propertyType = property.getPropertyType();
if (propertyType == null) {
propertyType = targetPkProperty.getPropertyType();
property.setPropertyType(propertyType);
// Property is not a regular property with primitive getters/setters, so let it catch up
property.init2ndPass();
property.init3ndPass();
} else if (propertyType != targetPkProperty.getPropertyType()) {
System.err.println("Warning to-one property type does not match target key type: " + this);
}
resolvedKeyJavaType[0] = schema.mapToJavaTypeNullable(propertyType);
resolvedKeyUseEquals[0] = checkUseEquals(propertyType);
}
protected boolean checkUseEquals(PropertyType propertyType) {
boolean useEquals;
switch (propertyType) {
case Byte:
case Short:
case Int:
case Long:
case Boolean:
case Float:
useEquals = true;
break;
default:
useEquals = false;
break;
}
return useEquals;
}
@Override
public String toString() {
String sourceName = sourceEntity != null ? sourceEntity.getClassName() : null;
String targetName = targetEntity != null ? targetEntity.getClassName() : null;
return "ToOne '" + name + "' from " + sourceName + " to " + targetName;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy