001 /*--------------------------------------------------------------------------+ 002 $Id: SimulinkInPort.java 26285 2010-02-18 11:22:54Z juergens $ 003 | | 004 | Copyright 2005-2010 Technische Universitaet Muenchen | 005 | | 006 | Licensed under the Apache License, Version 2.0 (the "License"); | 007 | you may not use this file except in compliance with the License. | 008 | You may obtain a copy of the License at | 009 | | 010 | http://www.apache.org/licenses/LICENSE-2.0 | 011 | | 012 | Unless required by applicable law or agreed to in writing, software | 013 | distributed under the License is distributed on an "AS IS" BASIS, | 014 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 015 | See the License for the specific language governing permissions and | 016 | limitations under the License. | 017 +--------------------------------------------------------------------------*/ 018 package edu.tum.cs.simulink.model; 019 020 import edu.tum.cs.commons.assertion.CCSMPre; 021 import edu.tum.cs.commons.assertion.PreconditionException; 022 023 /** 024 * A Simulink inport. An inport can be connected to only one 025 * {@link SimulinkLine}. 026 * 027 * 028 * @author deissenb 029 * @author $Author: juergens $ 030 * @version $Rev: 26285 $ 031 * @levd.rating GREEN Hash: 59BC605F822657C7D41209763A60100A 032 */ 033 public class SimulinkInPort extends SimulinkPortBase { 034 035 /** The line connected to this port. */ 036 private SimulinkLine line; 037 038 /** 039 * Create simulink inport. 040 * 041 * @param block 042 * The block this port belongs to. 043 * @param index 044 * The port index. This may be a number or a string like 'enable' 045 */ 046 public SimulinkInPort(SimulinkBlock block, String index) { 047 super(block, index); 048 block.addInPort(this); 049 } 050 051 /** 052 * Get line connected to this port. 053 * 054 * @return the line or <code>null</code> if no line is connected. 055 */ 056 public SimulinkLine getLine() { 057 return line; 058 } 059 060 /** 061 * Set line connected to this port. This is only called from the 062 * {@link SimulinkLine}. 063 * 064 * @throws PreconditionException 065 * if this port already has a line or the line's destination 066 * port does not match this port. 067 */ 068 /* package */void setLine(SimulinkLine line) 069 throws IllegalArgumentException { 070 CCSMPre.isTrue(this.line == null, "Port already has a line"); 071 CCSMPre 072 .isTrue(line.getDstPort() == this, 073 "Line's port does not match."); 074 this.line = line; 075 } 076 077 /** 078 * Remove line. This is only called from the {@link SimulinkLine}. 079 * 080 * @throws PreconditionException 081 * if the provided line is not connected to this port 082 */ 083 /* package */void removeLine(SimulinkLine line) 084 throws IllegalArgumentException { 085 CCSMPre.isTrue(line != null, "Can not remove null line."); 086 CCSMPre.isTrue(line == this.line, "Line does not belong to this port."); 087 this.line = null; 088 } 089 090 /** {@inheritDoc} */ 091 @Override 092 public void remove() { 093 getBlock().removeInPort(this); 094 if (line != null) { 095 line.remove(); 096 } 097 super.remove(); 098 } 099 }