diff --git a/src/ui/tmldd/TMLArchiArtifact.java b/src/ui/tmldd/TMLArchiArtifact.java index ca275a65465c62330b433827d9510d95f9f39722..03d054ee22fc1fd28d148c599d6cb5ed1272f8f3 100755 --- a/src/ui/tmldd/TMLArchiArtifact.java +++ b/src/ui/tmldd/TMLArchiArtifact.java @@ -57,7 +57,7 @@ import ui.*; import ui.window.*; import tmltranslator.modelcompiler.*; -public class TMLArchiArtifact extends TGCWithoutInternalComponent implements SwallowedTGComponent, WithAttributes, TMLArchiTask { +public class TMLArchiArtifact extends TGCWithoutInternalComponent implements SwallowedTGComponent, WithAttributes, TMLArchiTaskInterface { protected int lineLength = 5; protected int textX = 5; protected int textY = 15; diff --git a/src/ui/tmldd/TMLArchiBUSNode.java b/src/ui/tmldd/TMLArchiBUSNode.java index 44c0a69c86d8e3ecd0edf39c2c81be51d7d01382..f6f436254d9d45e3ca4531d7cf8d1f3f46225d20 100755 --- a/src/ui/tmldd/TMLArchiBUSNode.java +++ b/src/ui/tmldd/TMLArchiBUSNode.java @@ -58,7 +58,7 @@ import ui.window.*; import tmltranslator.*; -public class TMLArchiBUSNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes, TMLArchiElement { +public class TMLArchiBUSNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes, TMLArchiElementInterface { private int textY1 = 15; private int textY2 = 30; private int derivationx = 2; diff --git a/src/ui/tmldd/TMLArchiBridgeNode.java b/src/ui/tmldd/TMLArchiBridgeNode.java index 77f812574862e4e365cb4bca793644840807de98..c6b3df8ef980ed019eaebd40ed6dd28341971d29 100755 --- a/src/ui/tmldd/TMLArchiBridgeNode.java +++ b/src/ui/tmldd/TMLArchiBridgeNode.java @@ -58,7 +58,7 @@ import ui.window.*; import tmltranslator.*; -public class TMLArchiBridgeNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes, TMLArchiElement { +public class TMLArchiBridgeNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes, TMLArchiElementInterface { private int textY1 = 15; private int textY2 = 30; private int derivationx = 2; diff --git a/src/ui/tmldd/TMLArchiCPInterface.java b/src/ui/tmldd/TMLArchiCPInterface.java new file mode 100755 index 0000000000000000000000000000000000000000..f76489f384860c5a2cab6de7c44cc04e3d294e5e --- /dev/null +++ b/src/ui/tmldd/TMLArchiCPInterface.java @@ -0,0 +1,51 @@ +/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + + ludovic.apvrille AT enst.fr + + This software is a computer program whose purpose is to allow the + edition of TURTLE analysis, design and deployment diagrams, to + allow the generation of RT-LOTOS or Java code from this diagram, + and at last to allow the analysis of formal validation traces + obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + from INRIA Rhone-Alpes. + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited + liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + /** + * Class TMLArchiCPInterface + * Interface of an architecture element + * Creation: 13/09/2016 + * @version 1.0 1"/09/2016 + * @author Ludovic APVRILLE + * @see + */ + +package ui.tmldd; + + +public interface TMLArchiCPInterface { +} diff --git a/src/ui/tmldd/TMLArchiCPNode.java b/src/ui/tmldd/TMLArchiCPNode.java index 651db4c14b8860a395f3d1b397c75b220fa80180..ca33fcae4342b1e94cd5a6fffa889cf65d3ceae5 100755 --- a/src/ui/tmldd/TMLArchiCPNode.java +++ b/src/ui/tmldd/TMLArchiCPNode.java @@ -59,7 +59,7 @@ import ui.window.*; import tmltranslator.*; import tmltranslator.modelcompiler.*; -public class TMLArchiCPNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes { +public class TMLArchiCPNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes, TMLArchiCPInterface { private int textY1 = 15; private int textY2 = 30; private int derivationx = 2; @@ -99,6 +99,8 @@ public class TMLArchiCPNode extends TMLArchiCommunicationNode implements Swallow myImageIcon = IconManager.imgic700; } + + public void internalDrawing(Graphics g) { Color c = g.getColor(); g.draw3DRect(x, y, width, height, true); diff --git a/src/ui/tmldd/TMLArchiCPUNode.java b/src/ui/tmldd/TMLArchiCPUNode.java index 38e0a703168c84a8cad116a3aa2ab8f070fc9bc7..26554e822b456a205235a70986fffc35feaf1fa6 100755 --- a/src/ui/tmldd/TMLArchiCPUNode.java +++ b/src/ui/tmldd/TMLArchiCPUNode.java @@ -60,7 +60,7 @@ import ui.interactivesimulation.*; import tmltranslator.*; import tmltranslator.modelcompiler.*; -public class TMLArchiCPUNode extends TMLArchiNode implements SwallowTGComponent, WithAttributes { +public class TMLArchiCPUNode extends TMLArchiNode implements SwallowTGComponent, WithAttributes, TMLArchiElementInterface { private int textY1 = 15; private int textY2 = 30; private int derivationx = 2; diff --git a/src/ui/tmldd/TMLArchiChannel.java b/src/ui/tmldd/TMLArchiChannelInterface.java similarity index 94% rename from src/ui/tmldd/TMLArchiChannel.java rename to src/ui/tmldd/TMLArchiChannelInterface.java index ab49fc74ee7c1c45f4ac8bf0df86dc3a9b765e94..f002078d4e92a3745837f876360eab552565c9fb 100755 --- a/src/ui/tmldd/TMLArchiChannel.java +++ b/src/ui/tmldd/TMLArchiChannelInterface.java @@ -36,7 +36,7 @@ knowledge of the CeCILL license and that you accept its terms. /** - * Class TMLArchiChannel + * Class TMLArchiChannelInterface * Interface of a mapping channel element * Creation: 13/09/2016 * @version 1.0 13/09/2016 @@ -47,5 +47,5 @@ package ui.tmldd; -public interface TMLArchiChannel { +public interface TMLArchiChannelInterface { } diff --git a/src/ui/tmldd/TMLArchiCommunicationArtifact.java b/src/ui/tmldd/TMLArchiCommunicationArtifact.java index 9fdf7757b84f14ad90d519bb56223cfbe8f33f47..f3e9163f26dabb73a3dfb7bcf0d4c4c66b4f28b8 100755 --- a/src/ui/tmldd/TMLArchiCommunicationArtifact.java +++ b/src/ui/tmldd/TMLArchiCommunicationArtifact.java @@ -56,7 +56,7 @@ import myutil.*; import ui.*; import ui.window.*; -public class TMLArchiCommunicationArtifact extends TGCWithoutInternalComponent implements SwallowedTGComponent, WithAttributes, TMLArchiChannel { +public class TMLArchiCommunicationArtifact extends TGCWithoutInternalComponent implements SwallowedTGComponent, WithAttributes, TMLArchiChannelInterface { protected int lineLength = 5; protected int textX = 5; protected int textY = 15; diff --git a/src/ui/tmldd/TMLArchiDMANode.java b/src/ui/tmldd/TMLArchiDMANode.java index 76ad43dba388d7109882282d3c45fbec2efd029a..8d669b69f63041afcee0b5a72e44df1313e2b42f 100755 --- a/src/ui/tmldd/TMLArchiDMANode.java +++ b/src/ui/tmldd/TMLArchiDMANode.java @@ -58,7 +58,7 @@ import ui.window.*; import tmltranslator.*; -public class TMLArchiDMANode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes, TMLArchiElement { +public class TMLArchiDMANode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes, TMLArchiElementInterface { private int textY1 = 15; private int textY2 = 30; private int derivationx = 2; diff --git a/src/ui/tmldd/TMLArchiDiagramPanel.java b/src/ui/tmldd/TMLArchiDiagramPanel.java index 0e2d50818d97c329b1029196f8250141f9eea650..16da97b477acb517db2b3601131c195610d1f558 100755 --- a/src/ui/tmldd/TMLArchiDiagramPanel.java +++ b/src/ui/tmldd/TMLArchiDiagramPanel.java @@ -400,15 +400,15 @@ public class TMLArchiDiagramPanel extends TDiagramPanel implements TDPWithAttrib case VIEW_ALL: return true; case VIEW_ARCHITECTURE_ONLY: - return (tgc instanceof TMLArchiElement); + return (tgc instanceof TMLArchiElementInterface); case VIEW_TASK_MAPPING: - return (tgc instanceof TMLArchiElement) || (tgc instanceof TMLArchiTask); + return (tgc instanceof TMLArchiElementInterface) || (tgc instanceof TMLArchiTaskInterface); case VIEW_CHANNEL_MAPPING: - return (tgc instanceof TMLArchiElement) || (tgc instanceof TMLArchiChannel); + return (tgc instanceof TMLArchiElementInterface) || (tgc instanceof TMLArchiChannelInterface); case VIEW_COMM_PATTERN: - return (tgc instanceof TMLArchiElement); + return (tgc instanceof TMLArchiElementInterface) || (tgc instanceof TMLArchiCPInterface); case VIEW_COMM_PATTERN_MAPPING: - return (tgc instanceof TMLArchiElement); + return (tgc instanceof TMLArchiElementInterface) || (tgc instanceof TMLArchiCPInterface) || (tgc instanceof TMLArchiPortInterface); default: return true; } diff --git a/src/ui/tmldd/TMLArchiElement.java b/src/ui/tmldd/TMLArchiElementInterface.java similarity index 87% rename from src/ui/tmldd/TMLArchiElement.java rename to src/ui/tmldd/TMLArchiElementInterface.java index 6eecf72dbd37dbef9b451386be21ffb679c34c07..eb5f2f2256e16bb4fe7572527edbffb9253c57b6 100755 --- a/src/ui/tmldd/TMLArchiElement.java +++ b/src/ui/tmldd/TMLArchiElementInterface.java @@ -36,7 +36,7 @@ knowledge of the CeCILL license and that you accept its terms. /** - * Class TMLArchiElement + * Class TMLArchiElementInterface * Interface of an architecture element * Creation: 12/09/2016 * @version 1.0 12/09/2016 @@ -46,16 +46,6 @@ package ui.tmldd; -import java.awt.*; -import java.util.*; -import javax.swing.*; -import org.w3c.dom.*; - -import myutil.*; -import ui.*; -import ui.window.*; -import tmltranslator.modelcompiler.*; - -public interface TMLArchiElement { +public interface TMLArchiElementInterface { } diff --git a/src/ui/tmldd/TMLArchiMemoryNode.java b/src/ui/tmldd/TMLArchiMemoryNode.java index dd8baf33f12c368f9fe5b5d39505ed096251c9e3..cde3f51b6a023e89e19d74cd40822032179fedef 100755 --- a/src/ui/tmldd/TMLArchiMemoryNode.java +++ b/src/ui/tmldd/TMLArchiMemoryNode.java @@ -58,7 +58,7 @@ import ui.window.*; import tmltranslator.*; -public class TMLArchiMemoryNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes { +public class TMLArchiMemoryNode extends TMLArchiCommunicationNode implements SwallowTGComponent, WithAttributes, TMLArchiElementInterface { private int textY1 = 15; private int textY2 = 30; diff --git a/src/ui/tmldd/TMLArchiPortArtifact.java b/src/ui/tmldd/TMLArchiPortArtifact.java index 3853ba6788ecf33daf0fe9853faf65bcc0f70c13..876024edbfd138a8a6782d951c3e858cd828c9d0 100644 --- a/src/ui/tmldd/TMLArchiPortArtifact.java +++ b/src/ui/tmldd/TMLArchiPortArtifact.java @@ -57,7 +57,7 @@ import ui.*; import ui.window.*; import tmltranslator.modelcompiler.*; -public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements SwallowedTGComponent, WithAttributes { +public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements SwallowedTGComponent, WithAttributes, TMLArchiPortInterface { protected int lineLength = 5; protected int textX = 5; protected int textY = 15; @@ -73,8 +73,8 @@ public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements protected String typeName = "port"; protected String startAddress = ""; protected String endAddress = ""; - protected ArrayList<String> bufferParameters = new ArrayList<String>(); - protected String bufferType = "noBuffer"; + protected ArrayList<String> bufferParameters = new ArrayList<String>(); + protected String bufferType = "noBuffer"; protected int priority = 5; // Between 0 and 10 public TMLArchiPortArtifact(int _x, int _y, int _minX, int _maxX, int _minY, int _maxY, boolean _pos, TGComponent _father, TDiagramPanel _tdp) { @@ -102,6 +102,19 @@ public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements myImageIcon = IconManager.imgic702; } + public boolean isHidden() { + //TraceManager.addDev("Archi task artifact: Am I hidden?" + getValue()); + boolean ret = false; + if (tdp != null) { + if (tdp instanceof TMLArchiDiagramPanel) { + ret = !(((TMLArchiDiagramPanel)(tdp)).inCurrentView(this)); + + } + } + //TraceManager.addDev("Hidden? -> " + ret); + return ret; + } + public int getPriority() { return priority; } @@ -138,7 +151,7 @@ public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements g.setFont(f); // Link to selected memory - Color c = g.getColor(); + Color c = g.getColor(); if (c == ColorManager.POINTER_ON_ME_0) { TDiagramPanel tdp = getTDiagramPanel(); TGComponent tgc; @@ -187,13 +200,13 @@ public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements String tmp; boolean error = false; - TraceManager.addDev( "bufferParameters before opening the window: " + bufferParameters.toString() ); + TraceManager.addDev( "bufferParameters before opening the window: " + bufferParameters.toString() ); JDialogPortArtifact dialog = new JDialogPortArtifact(frame, "Setting port artifact attributes", this, mappedMemory, bufferParameters, value ); dialog.setSize(700, 600); GraphicLib.centerOnParent(dialog); dialog.show(); // blocked until dialog has been closed mappedMemory = dialog.getMappedMemory(); - bufferParameters = dialog.getBufferParameters(); //becomes empty if closing the window without pushing Save + bufferParameters = dialog.getBufferParameters(); //becomes empty if closing the window without pushing Save TraceManager.addDev( "bufferParameters after closing the window: " + bufferParameters.toString() ); bufferType = bufferParameters.get( Buffer.BUFFER_TYPE_INDEX ); @@ -266,28 +279,28 @@ public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements sb.append(referenceCommunicationName); sb.append("\" typeName=\"" + typeName); sb.append("\" mappedMemory=\"" + mappedMemory ); - if( !bufferType.equals( "" ) && !bufferType.equals( "noBuffer" ) ) { - switch( Integer.parseInt( bufferType ) ) { - case Buffer.FEP_BUFFER: - sb.append( FepBuffer.appendBufferParameters( bufferParameters ) ); - break; - case Buffer.INTERLEAVER_BUFFER: - sb.append( InterleaverBuffer.appendBufferParameters( bufferParameters ) ); - break; - case Buffer.ADAIF_BUFFER: - sb.append( AdaifBuffer.appendBufferParameters( bufferParameters ) ); - break; - case Buffer.MAPPER_BUFFER: - sb.append( MapperBuffer.appendBufferParameters( bufferParameters ) ); - break; - case Buffer.MAIN_MEMORY_BUFFER: - sb.append( MMBuffer.appendBufferParameters( bufferParameters ) ); - break; - default: //the fep buffer - sb.append( FepBuffer.appendBufferParameters( bufferParameters ) ); - break; - } - } + if( !bufferType.equals( "" ) && !bufferType.equals( "noBuffer" ) ) { + switch( Integer.parseInt( bufferType ) ) { + case Buffer.FEP_BUFFER: + sb.append( FepBuffer.appendBufferParameters( bufferParameters ) ); + break; + case Buffer.INTERLEAVER_BUFFER: + sb.append( InterleaverBuffer.appendBufferParameters( bufferParameters ) ); + break; + case Buffer.ADAIF_BUFFER: + sb.append( AdaifBuffer.appendBufferParameters( bufferParameters ) ); + break; + case Buffer.MAPPER_BUFFER: + sb.append( MapperBuffer.appendBufferParameters( bufferParameters ) ); + break; + case Buffer.MAIN_MEMORY_BUFFER: + sb.append( MMBuffer.appendBufferParameters( bufferParameters ) ); + break; + default: //the fep buffer + sb.append( FepBuffer.appendBufferParameters( bufferParameters ) ); + break; + } + } sb.append("\" />\n"); sb.append("</extraparam>\n"); return new String(sb); @@ -326,32 +339,32 @@ public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements mappedMemory = elt.getAttribute("mappedMemory"); TraceManager.addDev( mappedMemory ); TraceManager.addDev( "bufferType = " + elt.getAttribute("bufferType") ); - if( (elt.getAttribute("bufferType") != null) && (elt.getAttribute("bufferType").length() > 0) ) { - bufferType = elt.getAttribute("bufferType"); - TraceManager.addDev( bufferType ); - //bufferParameters.add( bufferType ); - switch( Integer.parseInt( bufferType ) ) { - case Buffer.FEP_BUFFER: - bufferParameters = FepBuffer.buildBufferParameters( elt ); - break; - case Buffer.INTERLEAVER_BUFFER: - bufferParameters = InterleaverBuffer.buildBufferParameters( elt ); - break; - case Buffer.ADAIF_BUFFER: - bufferParameters = AdaifBuffer.buildBufferParameters( elt ); - break; - case Buffer.MAPPER_BUFFER: - bufferParameters = MapperBuffer.buildBufferParameters( elt ); - break; - case Buffer.MAIN_MEMORY_BUFFER: - bufferParameters = MMBuffer.buildBufferParameters( elt ); - break; - default: //the main memory buffer - bufferParameters = FepBuffer.buildBufferParameters( elt ); - break; - } - } - TraceManager.addDev( "Buffer parameters of " + sname + ":\n" + bufferParameters.toString() ); + if( (elt.getAttribute("bufferType") != null) && (elt.getAttribute("bufferType").length() > 0) ) { + bufferType = elt.getAttribute("bufferType"); + TraceManager.addDev( bufferType ); + //bufferParameters.add( bufferType ); + switch( Integer.parseInt( bufferType ) ) { + case Buffer.FEP_BUFFER: + bufferParameters = FepBuffer.buildBufferParameters( elt ); + break; + case Buffer.INTERLEAVER_BUFFER: + bufferParameters = InterleaverBuffer.buildBufferParameters( elt ); + break; + case Buffer.ADAIF_BUFFER: + bufferParameters = AdaifBuffer.buildBufferParameters( elt ); + break; + case Buffer.MAPPER_BUFFER: + bufferParameters = MapperBuffer.buildBufferParameters( elt ); + break; + case Buffer.MAIN_MEMORY_BUFFER: + bufferParameters = MMBuffer.buildBufferParameters( elt ); + break; + default: //the main memory buffer + bufferParameters = FepBuffer.buildBufferParameters( elt ); + break; + } + } + TraceManager.addDev( "Buffer parameters of " + sname + ":\n" + bufferParameters.toString() ); //prio = elt.getAttribute("priority"); } if (svalue != null) { @@ -418,16 +431,16 @@ public class TMLArchiPortArtifact extends TGCWithoutInternalComponent implements return mappedMemory; } - public String getEndAddress() { - return endAddress; - } + public String getEndAddress() { + return endAddress; + } - public String getStartAddress() { - return startAddress; - } + public String getStartAddress() { + return startAddress; + } - public ArrayList<String> getBufferParameters() { - return bufferParameters; - } + public ArrayList<String> getBufferParameters() { + return bufferParameters; + } } diff --git a/src/ui/tmldd/TMLArchiPortInterface.java b/src/ui/tmldd/TMLArchiPortInterface.java new file mode 100755 index 0000000000000000000000000000000000000000..07f77f95c9ee2fe23755650f1edd9e5ef1367d49 --- /dev/null +++ b/src/ui/tmldd/TMLArchiPortInterface.java @@ -0,0 +1,51 @@ +/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + + ludovic.apvrille AT enst.fr + + This software is a computer program whose purpose is to allow the + edition of TURTLE analysis, design and deployment diagrams, to + allow the generation of RT-LOTOS or Java code from this diagram, + and at last to allow the analysis of formal validation traces + obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + from INRIA Rhone-Alpes. + + This software is governed by the CeCILL license under French law and + abiding by the rules of distribution of free software. You can use, + modify and/ or redistribute the software under the terms of the CeCILL + license as circulated by CEA, CNRS and INRIA at the following URL + "http://www.cecill.info". + + As a counterpart to the access to the source code and rights to copy, + modify and redistribute granted by the license, users are provided only + with a limited warranty and the software's author, the holder of the + economic rights, and the successive licensors have only limited + liability. + + In this respect, the user's attention is drawn to the risks associated + with loading, using, modifying and/or developing or reproducing the + software by the user in light of its specific status of free software, + that may mean that it is complicated to manipulate, and that also + therefore means that it is reserved for developers and experienced + professionals having in-depth computer knowledge. Users are therefore + encouraged to load and test the software's suitability as regards their + requirements in conditions enabling the security of their systems and/or + data to be ensured and, more generally, to use and operate it in the + same conditions as regards security. + + The fact that you are presently reading this means that you have had + knowledge of the CeCILL license and that you accept its terms. + + /** + * Class TMLArchiPortInterface + * Interface of port artifact + * Creation: 13/09/2016 + * @version 1.0 13/09/2016 + * @author Ludovic APVRILLE + * @see + */ + +package ui.tmldd; + + +public interface TMLArchiPortInterface { +} diff --git a/src/ui/tmldd/TMLArchiTask.java b/src/ui/tmldd/TMLArchiTaskInterface.java similarity index 94% rename from src/ui/tmldd/TMLArchiTask.java rename to src/ui/tmldd/TMLArchiTaskInterface.java index 817b17631f1789926dcb26ce59781202ffdbbe0b..9f2249a830c36eb379474a69972d9390e0321401 100755 --- a/src/ui/tmldd/TMLArchiTask.java +++ b/src/ui/tmldd/TMLArchiTaskInterface.java @@ -36,7 +36,7 @@ knowledge of the CeCILL license and that you accept its terms. /** - * Class TMLArchiTask + * Class TMLArchiTaskInterface * Interface of a mapping task element * Creation: 12/09/2016 * @version 1.0 12/09/2016 @@ -47,5 +47,5 @@ package ui.tmldd; -public interface TMLArchiTask { +public interface TMLArchiTaskInterface { }