blob: d43c025b287a0c81fa045ddd9447bfec41817b0b [file] [log] [blame]
/*
* 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.events;
import java.util.*;
import org.eclipse.persistence.sessions.SessionEvent;
import org.eclipse.persistence.sessions.SessionEventAdapter;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.descriptors.DescriptorEventManager;
import org.eclipse.persistence.testing.framework.*;
import org.eclipse.persistence.tools.schemaframework.*;
public class EventHookSystem extends TestSystem {
public static int POST_CALCULATE_UOW_CHANGE_SET = 0;
@Override
public void addDescriptors(DatabaseSession session) {
Vector descriptors = new Vector();
descriptors.add(Order.descriptor());
descriptors.add(CreditCard.descriptor());
descriptors.add(getCustomerDescriptor());
descriptors.add(getEmailAccountDescriptor());
session.getEventManager().addListener(new SessionEventAdapter() {
@Override
public void postCalculateUnitOfWorkChangeSet(SessionEvent event) {
POST_CALCULATE_UOW_CHANGE_SET++;
}
});
descriptors.add(Phone.descriptor());
descriptors.add(getAddressDescriptor());
session.addDescriptors(descriptors);
session.addDescriptors(new AboutToInsertProject());
}
@Override
public void createTables(DatabaseSession session) {
SchemaManager schemaManager = new SchemaManager(session);
schemaManager.replaceObject(Customer.tableDefinition());
schemaManager.replaceObject(Customer.directCollectionTableDefinition());
schemaManager.replaceObject(Order.tableDefinition());
schemaManager.replaceObject(EmailAccount.tableDefinition());
schemaManager.replaceObject(Phone.tableDefinition());
schemaManager.replaceObject(Address.tableDefinition());
(new AboutToInsertProjectTableCreator()).replaceTables(session);
schemaManager.createSequences();
}
public ClassDescriptor getAddressDescriptor() {
ClassDescriptor addressDescriptor = Address.descriptor();
DescriptorEventManager eventManager = addressDescriptor.getDescriptorEventManager();
eventManager.addListener(new AddressDescriptorEventListener());
return addressDescriptor;
}
public ClassDescriptor getCustomerDescriptor() {
ClassDescriptor customerDescriptor = Customer.descriptor();
customerDescriptor.getEventManager().addListener(new CustomerDescriptorEventListener());
return customerDescriptor;
}
public ClassDescriptor getEmailAccountDescriptor() {
ClassDescriptor emailDescriptor = EmailAccount.descriptor();
DescriptorEventManager eventManager = emailDescriptor.getDescriptorEventManager();
// Set the event hooks for pre and post Insert
eventManager.setPreInsertSelector("preInsertMethod");
eventManager.setPostInsertSelector("postInsertMethod");
// Set the event hooks for pre and post Delete
eventManager.setPreDeleteSelector("preDeleteMethod");
eventManager.setPostDeleteSelector("postDeleteMethod");
// Set the event hooks for pre and post Update
eventManager.setPreUpdateSelector("preUpdateMethod");
eventManager.setPostUpdateSelector("postUpdateMethod");
// Set the event hooks for pre and post Write
eventManager.setPreWriteSelector("preWriteMethod");
eventManager.setPostWriteSelector("postWriteMethod");
// Set the event hooks for post Build
eventManager.setPostBuildSelector("postBuildMethod");
// Set the event hooks for about to insert, update and delete
eventManager.setAboutToInsertSelector("aboutToInsertMethod");
eventManager.setAboutToUpdateSelector("aboutToUpdateMethod");
eventManager.setAboutToDeleteSelector("aboutToDeleteMethod");
// Set the event hook for post clone
eventManager.setPostCloneSelector("postCloneMethod");
// Set the event hook for post merge
eventManager.setPostMergeSelector("postMergeMethod");
// Set the event hook for post refresh
eventManager.setPostRefreshSelector("postRefreshMethod");
return emailDescriptor;
}
@Override
public void populate(DatabaseSession session) {
}
}