/*******************************************************************************
* Copyright (c) 2015 IBH SYSTEMS GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBH SYSTEMS GmbH - initial API and implementation
*******************************************************************************/
package org.eclipse.packagedrone.storage.apm;
public abstract class AbstractSimpleStorageModelProvider<V, W> implements StorageModelProvider<V, W>
{
private StorageContext context;
private V viewModel;
private W writeModel;
private final Class<W> writeModelClazz;
public AbstractSimpleStorageModelProvider ( final Class<V> viewClazz, final Class<W> writeClazz )
{
this.writeModelClazz = writeClazz;
}
@Override
public V getViewModel ()
{
return this.viewModel;
}
@Override
public void start ( final StorageContext context ) throws Exception
{
this.context = context;
this.writeModel = loadWriteModel ( context );
this.viewModel = makeViewModel ( this.writeModel );
}
@Override
public void stop ()
{
}
@Override
public W cloneWriteModel ()
{
return cloneWriteModel ( this.writeModel );
}
@Override
public void persistWriteModel ( final W writeModel ) throws Exception
{
final V viewModel = makeViewModel ( writeModel );
persistWriteModel ( this.context, writeModel );
this.writeModel = writeModel;
this.viewModel = viewModel;
}
@Override
public V makeViewModel ( final Object writeModel )
{
return makeViewModelTyped ( this.writeModelClazz.cast ( writeModel ) );
}
protected abstract V makeViewModelTyped ( W writeModel );
protected abstract W cloneWriteModel ( final W writeModel );
protected abstract void persistWriteModel ( StorageContext context, final W writeModel ) throws Exception;
protected abstract W loadWriteModel ( StorageContext context ) throws Exception;
}