/*
Copyright 2014 Google Inc. All Rights Reserved.
Licensed 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
http://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
limitations under the License.
*/
package com.google.security.zynamics.binnavi.Database.MockClasses;
import com.google.security.zynamics.binnavi.CUtilityFunctions;
import com.google.security.zynamics.binnavi.Common.CommonTestObjects;
import com.google.security.zynamics.binnavi.Database.CDatabaseConfiguration;
import com.google.security.zynamics.binnavi.Database.Interfaces.IDatabase;
import com.google.security.zynamics.binnavi.Database.Interfaces.IDatabaseListener;
import com.google.security.zynamics.binnavi.Database.Interfaces.SQLProvider;
import com.google.security.zynamics.binnavi.debug.debugger.DebuggerTemplateManager;
import com.google.security.zynamics.binnavi.disassembly.CProject;
import com.google.security.zynamics.binnavi.disassembly.IDatabaseObject;
import com.google.security.zynamics.zylib.general.ListenerProvider;
import java.sql.ResultSet;
public final class MockDatabase implements IDatabase {
private final ListenerProvider<IDatabaseListener> listeners =
new ListenerProvider<IDatabaseListener>();
private boolean isLoaded = true;
private final MockDatabaseContent content;
private final CDatabaseConfiguration m_descriptionX = new CDatabaseConfiguration(this,
listeners,
"Mock Database",
"postgres",
"",
"",
"",
"",
CommonTestObjects.TEST_USER_1.getUserName(),
true,
true);
/**
* The SQL provider that is used to communicate with the database. If the database is not
* connected, this object is null.
*/
private final SQLProvider provider;
public MockDatabase() {
this(new MockSqlProvider());
}
public MockDatabase(final MockSqlProvider mockSqlProvider) {
provider = mockSqlProvider;
content =
new MockDatabaseContent(this, new DebuggerTemplateManager(mockSqlProvider), listeners);
}
@Override
public void addListener(final IDatabaseListener listener) {
listeners.addListener(listener);
}
public void addProject(final CProject project) {
content.addProject(project);
}
@Override
public boolean close() {
for (final IDatabaseListener listener : listeners) {
try {
if (!listener.closingDatabase(this)) {
return false;
}
} catch (final Exception exception) {
CUtilityFunctions.logException(exception);
}
}
for (final IDatabaseListener listener : listeners) {
try {
listener.closedDatabase(this);
} catch (final Exception exception) {
CUtilityFunctions.logException(exception);
}
}
isLoaded = false;
return true;
}
@Override
public void connect() {
for (final IDatabaseListener listener : listeners) {
try {
listener.openedDatabase(this);
} catch (final Exception exception) {
CUtilityFunctions.logException(exception);
}
}
}
@Override
public ResultSet executeQuery(final String query) {
throw new IllegalStateException("Not yet implemented");
}
@Override
public CDatabaseConfiguration getConfiguration() {
return m_descriptionX;
}
@Override
public MockDatabaseContent getContent() {
return content;
}
@Override
public boolean inSameDatabase(final IDatabaseObject provider) {
return true;
}
@Override
public boolean inSameDatabase(final SQLProvider provider) {
return this.provider == provider;
}
@Override
public boolean isConnected() {
return isLoaded;
}
@Override
public boolean isConnecting() {
return false;
}
@Override
public boolean isLoaded() {
return isLoaded;
}
@Override
public boolean isLoading() {
return false;
}
@Override
public void load() {
for (final IDatabaseListener listener : listeners) {
try {
listener.loadedDatabase(this);
} catch (final Exception exception) {
CUtilityFunctions.logException(exception);
}
}
}
@Override
public void removeListener(final IDatabaseListener listener) {
listeners.removeListener(listener);
}
@Override
public void update() {}
}