Created
March 25, 2014 13:45
-
-
Save jirkapenzes/9762108 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.jpenzes.smawing; | |
import com.jpenzes.smawing.utils.IFrameFactory; | |
import com.jpenzes.smawing.utils.IObjectContainer; | |
import com.jpenzes.smawing.utils.ObjectContainer; | |
import com.jpenzes.smawing.utils.SDefaultFrameFactory; | |
import javax.swing.*; | |
public abstract class SFrame { | |
private JFrame frame; | |
private final IObjectContainer<Class, SModel> models; | |
private final IObjectContainer<Class, SView<? extends SModel>> views; | |
private final IObjectContainer<Class, SController<? extends SView<? extends SModel>, ? extends SModel>> controllers; | |
private final IFrameFactory frameFactory; | |
public SFrame() { | |
this(new SDefaultFrameFactory()); | |
} | |
public SFrame(IFrameFactory frameFactory) { | |
this.frameFactory = frameFactory; | |
this.models = new ObjectContainer<Class, SModel>(); | |
this.views = new ObjectContainer<Class, SView<? extends SModel>>(); | |
this.controllers = new ObjectContainer<Class, SController<? extends SView<? extends SModel>, ? extends SModel>>(); | |
initialize(); | |
registerAllModels(); | |
registerAllViews(); | |
registerAllControllers(); | |
} | |
protected abstract void initialize(); | |
protected abstract void registerAllModels(); | |
protected abstract void registerAllViews(); | |
protected abstract void registerAllControllers(); | |
protected abstract JFrame layout(); | |
public void show() { | |
if (frame == null) { | |
frame = layout(); | |
initializeControllers(); | |
} | |
frameFactory.showFrame(frame); | |
} | |
private void initializeControllers() { | |
for (SController controller : controllers) { | |
controller.initialize(); | |
} | |
} | |
public JFrame getFrame() { | |
return frame; | |
} | |
public IFrameFactory getFrameFactory() { | |
return frameFactory; | |
} | |
public <Model extends SModel> Model getModel(Class<Model> modelClass) { | |
return models.get(modelClass); | |
} | |
public <View extends SView<? extends SModel>> View getView(Class<View> viewClass) { | |
return views.get(viewClass); | |
} | |
public <Controller extends SController<? extends SView<? extends SModel>, ? extends SModel>> Controller getController(Class<Controller> controllerClass) { | |
return controllers.get(controllerClass); | |
} | |
protected <Model extends SModel> void registerModel(Class className, Model model) { | |
models.register(className, model); | |
} | |
protected <View extends SView<? extends SModel>> void registerView(Class className, View view) { | |
views.register(className, view); | |
} | |
protected <Controller extends SController<? extends SView<? extends SModel>, ? extends SModel>> void registerController(Class className, Controller controller) { | |
controllers.register(className, controller); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment