| /* |
| * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Oracle - initial API and implementation from Oracle TopLink |
| package org.eclipse.persistence.testing.models.mapping; |
| |
| import java.util.*; |
| import java.sql.Timestamp; |
| import java.io.*; |
| import org.eclipse.persistence.sessions.*; |
| import org.eclipse.persistence.descriptors.DescriptorEvent; |
| import org.eclipse.persistence.tools.schemaframework.*; |
| |
| public class Shipment implements Serializable, Cloneable { |
| public static Timestamp lastCreationTimestamp; |
| public Timestamp creationTimestamp; |
| public int creationTimestampMillis; |
| public String quantityShipped; |
| public String shipMode; |
| public Vector employees; |
| |
| public Shipment() { |
| this.employees = new Vector(); |
| } |
| |
| /** |
| * NOTE: this should not be needed. This is only |
| * here because there seems to be a VisualAge bug |
| * that can't reflectively call superclass methods. |
| */ |
| @Override |
| public Object clone() { |
| try { |
| return super.clone(); |
| } catch (CloneNotSupportedException exception) { |
| } |
| return null; |
| } |
| |
| public static Shipment example1() { |
| Shipment example = new Shipment(); |
| |
| example.quantityShipped = "1 ton"; |
| example.shipMode = "Air"; |
| |
| return example; |
| } |
| |
| public static Shipment example2() { |
| Shipment example = new Shipment(); |
| |
| example.quantityShipped = "2 ton"; |
| example.shipMode = "Air"; |
| |
| return example; |
| } |
| |
| public static Shipment example3() { |
| Shipment example = new Shipment(); |
| |
| example.quantityShipped = "3 ton"; |
| example.shipMode = "Ship"; |
| |
| return example; |
| } |
| |
| public static Shipment example4() { |
| Shipment example = new Shipment(); |
| |
| example.quantityShipped = "4 ton"; |
| example.shipMode = "Ship"; |
| |
| return example; |
| } |
| |
| public static Shipment example5() { |
| Shipment example = new Shipment(); |
| |
| example.quantityShipped = "6 ton"; |
| example.shipMode = "Plane"; |
| |
| return example; |
| } |
| |
| public static Shipment example6() { |
| Shipment example = new Shipment(); |
| |
| example.quantityShipped = "2 kg"; |
| example.shipMode = "Pony Express"; |
| |
| return example; |
| } |
| |
| public void prepareForInsert(DescriptorEvent event) { |
| Session session = event.getSession(); |
| if (this.creationTimestamp != null) { |
| throw new RuntimeException("Insert event fired twice"); |
| } |
| this.creationTimestamp = new Timestamp(System.currentTimeMillis()); |
| while (this.creationTimestamp.equals(lastCreationTimestamp)) { |
| try { |
| // Sleep to ensure milliseconds is ok. |
| Thread.sleep(1); |
| // Symfoware does not support nanos and millis. |
| // Need to wait at least a second to prevent unique key |
| // constraint violation at next insert |
| if (session.getLogin().getPlatform().isSymfoware()) Thread.sleep(1000); |
| } catch (InterruptedException exception) { |
| } |
| this.creationTimestamp = new Timestamp(System.currentTimeMillis()); |
| } |
| lastCreationTimestamp = (Timestamp)this.creationTimestamp.clone(); |
| if (session.getLogin().getPlatform().isDB2() || session.getLogin().getPlatform().isAccess() || session.getLogin().getPlatform().isSQLServer() || session.getLogin().getPlatform().isOracle() || session.getLogin().getPlatform().isSybase() || session.getLogin().getPlatform().isSQLAnywhere() || session.getLogin().getPlatform().isMySQL() || session.getLogin().getPlatform().isSymfoware()) { |
| // Oracle does not support millis, Sybase stores them only within 1-2 millis... |
| //MySQL does not support millis as of 5.0 |
| this.creationTimestampMillis = creationTimestamp.getNanos(); |
| this.creationTimestamp.setNanos(0); |
| } |
| } |
| |
| public void removeEmployee(Employee employee) { |
| employees.removeElement(employee); |
| } |
| |
| /** |
| * Return a platform independant definition of the database table. |
| */ |
| public static TableDefinition tableDefinition() { |
| TableDefinition definition = new TableDefinition(); |
| |
| definition.setName("MAP_SHIP"); |
| |
| definition.addPrimaryKeyField("SP_TS", Timestamp.class); |
| definition.addPrimaryKeyField("SP_TSMIL", Integer.class); |
| definition.addField("QUANTITY", String.class, 20); |
| definition.addField("SHP_MODE", String.class, 50); |
| |
| return definition; |
| } |
| |
| public String toString() { |
| return "Shipment(" + quantityShipped + ")"; |
| } |
| } |