blob: f2a4af547b776e4989d3db4cf38a48d3ad895311 [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
<<<<<<< Updated upstream
*
* https://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
=======
*
* https://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
>>>>>>> Stashed changes
* limitations under the License.
*/
package org.apache.jdo.tck.pc.instancecallbacks;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.jdo.Extent;
import javax.jdo.InstanceCallbacks;
import javax.jdo.PersistenceManager;
public class InstanceCallbackNonPersistFdsClass implements InstanceCallbacks {
public int i; // non-managed
public char c; // non-managed
public double d; // transactional
public short s; // transactional
public Set<String> children; // non-managed
public Date loadTime; // non-managed
private int keyValue; // persistent--used as key field in application identity
public float floatValue; // persistent
public int intValue; // persistent --primary key field
private static int nextKeyValue = 1;
public static int savedIntValue;
public static float savedFloatValue;
public static Date savedLoadTime;
public static final String member1 = "one";
public static final String member2 = "two";
public static final String member3 = "three";
public static boolean preClearCalled = false;
public static boolean preStoreCalled = false;
public static boolean preDeleteCalled = false;
public static boolean postloadCalled = false;
public static boolean postloadCalledMultipleTimes = false;
// used in CallingJdoPostload test
public static final int beforeGetObjectById = 1;
public static final int afterGetObjectById = 2;
public static int savedApplicationStep;
public static int applicationStep; // values are 0, beforeGetObjectById and afterGetObjectById
// used in ModificationOfNontransactionalNonpersistentFields test
public static List<Exception> exceptions = new ArrayList<>();
public static List<String> callbackCalled = new ArrayList<>();
public static List<String> attributeOpCausingExceptions = new ArrayList<>();
public static void initializeStaticsForTest() {
savedIntValue = 0;
savedFloatValue = 0.0f;
savedLoadTime = null;
preClearCalled = false;
preStoreCalled = false;
preDeleteCalled = false;
postloadCalled = false;
postloadCalledMultipleTimes = false;
savedApplicationStep = 0;
applicationStep = 0;
exceptions = new ArrayList<>();
callbackCalled = new ArrayList<>();
attributeOpCausingExceptions = new ArrayList<>();
}
public static void removeAllInstances(PersistenceManager pm) {
Extent<InstanceCallbackNonPersistFdsClass> e =
pm.getExtent(InstanceCallbackNonPersistFdsClass.class, true);
for (InstanceCallbackNonPersistFdsClass instanceCallbackNonPersistFdsClass : e) {
pm.deletePersistent(instanceCallbackNonPersistFdsClass);
}
}
public InstanceCallbackNonPersistFdsClass() {}
public InstanceCallbackNonPersistFdsClass(float floatValue, int intValue) {
keyValue = nextKeyValue++;
this.floatValue = floatValue;
this.intValue = intValue;
}
public void setNonPersist(int i, char c, double d, short s) {
this.i = i;
this.c = c;
this.d = d;
this.s = s;
}
public void setNonManaged(int i, char c) {
this.i = i;
this.c = c;
}
public int calcIntValue() {
return i * c;
}
public float calcFloatValue() {
return (float) (d * s);
}
public void incrementIntValue() {
intValue++;
}
public void jdoPreStore() {
preStoreCalled = true;
intValue = calcIntValue();
floatValue = calcFloatValue();
try {
i = -30;
} catch (Exception e) {
callbackCalled.add("jdoPreStore ");
exceptions.add(e);
attributeOpCausingExceptions.add("i = -30;");
}
try {
c = '\u0000';
} catch (Exception e) {
callbackCalled.add("jdoPreStore ");
exceptions.add(e);
attributeOpCausingExceptions.add("c = '\u0000';");
}
try {
d = 362.5;
} catch (Exception e) {
callbackCalled.add("jdoPreStore ");
exceptions.add(e);
attributeOpCausingExceptions.add("d = 362.5;");
}
try {
s = 0;
} catch (Exception e) {
callbackCalled.add("jdoPreStore ");
exceptions.add(e);
attributeOpCausingExceptions.add("s = 0;");
}
try {
loadTime = null;
} catch (Exception e) {
callbackCalled.add("jdoPreStore ");
exceptions.add(e);
attributeOpCausingExceptions.add("loadTime = null;");
}
try {
children = null;
} catch (Exception e) {
callbackCalled.add("jdoPreStore ");
exceptions.add(e);
attributeOpCausingExceptions.add("children = null;");
}
}
public void jdoPreDelete() {
preDeleteCalled = true;
try {
i = 0;
} catch (Exception e) {
callbackCalled.add("jdoPreDelete ");
exceptions.add(e);
attributeOpCausingExceptions.add("i = 0;");
}
try {
c = 'x';
} catch (Exception e) {
callbackCalled.add("jdoPreDelete ");
exceptions.add(e);
attributeOpCausingExceptions.add("c = 'x';");
}
try {
d = 0.0;
} catch (Exception e) {
callbackCalled.add("jdoPreDelete ");
exceptions.add(e);
attributeOpCausingExceptions.add("d = 0.0;");
}
try {
s = -5;
} catch (Exception e) {
callbackCalled.add("jdoPreDelete ");
exceptions.add(e);
attributeOpCausingExceptions.add("s = -5;");
}
try {
loadTime = null;
} catch (Exception e) {
callbackCalled.add("jdoPreDelete ");
exceptions.add(e);
attributeOpCausingExceptions.add("loadTime = null;");
}
try {
children = null;
} catch (Exception e) {
callbackCalled.add("jdoPreDelete ");
exceptions.add(e);
attributeOpCausingExceptions.add("children = null;");
}
}
public void jdoPostLoad() {
postloadCalled = true;
savedApplicationStep = applicationStep;
i = -10;
c = '2';
d = 30.0;
s = 40;
savedIntValue = intValue;
savedFloatValue = floatValue;
loadTime = new Date();
savedLoadTime = loadTime;
children = new HashSet<>();
children.add(member1);
children.add(member2);
children.add(member3);
}
public void jdoPreClear() {
preClearCalled = true;
try {
i = 1;
} catch (Exception e) {
callbackCalled.add("jdoPreClear ");
exceptions.add(e);
attributeOpCausingExceptions.add("i = 1;");
}
try {
c = '2';
} catch (Exception e) {
callbackCalled.add("jdoPreClear ");
exceptions.add(e);
attributeOpCausingExceptions.add("c = '2';");
}
try {
d = 3.0;
} catch (Exception e) {
callbackCalled.add("jdoPreClear ");
exceptions.add(e);
attributeOpCausingExceptions.add("d = 3.0;");
}
try {
s = 4;
} catch (Exception e) {
callbackCalled.add("jdoPreClear ");
exceptions.add(e);
attributeOpCausingExceptions.add("s = 4;");
}
try {
loadTime = null;
} catch (Exception e) {
callbackCalled.add("jdoPreClear ");
exceptions.add(e);
attributeOpCausingExceptions.add("loadTime = null;");
}
try {
children = null;
} catch (Exception e) {
callbackCalled.add("jdoPreClear ");
exceptions.add(e);
attributeOpCausingExceptions.add("children = null;");
}
}
public static class KeyClass implements Serializable {
private static final long serialVersionUID = 1L;
public int keyValue;
public KeyClass() {}
public KeyClass(String s) {
try {
keyValue = Integer.parseInt(s);
} catch (NumberFormatException e) {
keyValue = 0;
}
}
public boolean equals(Object obj) {
if (obj == null || !this.getClass().equals(obj.getClass())) return false;
else return keyValue == ((KeyClass) obj).keyValue;
}
public int hashCode() {
return keyValue;
}
public String toString() {
return Integer.toString(keyValue);
}
}
}