////////////////////////////////////////////////////////////////////////////////
// Copyright 2013 Michael Schmalle - Teoti Graphix, LLC
//
// 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
//
// Author: Michael Schmalle, Principal Architect
// mschmalle at teotigraphix dot com
////////////////////////////////////////////////////////////////////////////////
package com.teotigraphix.caustk.sound.master;
import com.teotigraphix.caustk.controller.ICaustkController;
import com.teotigraphix.caustk.core.ICausticEngine;
import com.teotigraphix.caustk.core.IRestore;
import com.teotigraphix.caustk.core.osc.CausticMessage;
import com.teotigraphix.caustk.service.ISerialize;
import com.teotigraphix.caustk.utils.ExceptionUtils;
public class MasterComponent implements ISerialize, IRestore {
private transient ICaustkController controller;
public void setController(ICaustkController controller) {
this.controller = controller;
}
protected ICausticEngine getEngine() {
return controller;
}
protected transient CausticMessage bypassMessage;
//----------------------------------
// bypass
//----------------------------------
private boolean bypass = false;
public boolean isBypass() {
return bypass;
}
boolean isBypass(boolean restore) {
return bypassMessage.query(getEngine()) == 1 ? true : false;
}
public void setBypass(boolean value) {
if (bypass == value)
return;
bypass = value;
bypassMessage.send(getEngine(), value ? 1 : 0);
}
//--------------------------------------------------------------------------
// Constructor
//--------------------------------------------------------------------------
public MasterComponent() {
}
public MasterComponent(ICaustkController controller) {
this.controller = controller;
}
/**
* Returns a new {@link IllegalArgumentException} for an error in OSC range.
*
* @param control The OSC control involved.
* @param range The accepted range.
* @param value The value that is throwing the range exception.
* @return A new {@link IllegalArgumentException}.
*/
protected final RuntimeException newRangeException(String control, String range, Object value) {
return ExceptionUtils.newRangeException(control, range, value);
}
@Override
public void restore() {
setBypass(isBypass(true));
}
@Override
public void sleep() {
}
@Override
public void wakeup(ICaustkController controller) {
this.controller = controller;
}
}